代码之家  ›  专栏  ›  技术社区  ›  Mugunth

在mkannotationview中替换calloutaccessoryview

  •  4
  • Mugunth  · 技术社区  · 14 年前

    在我的 viewForAnnotation 委托,我创建 MKAnnotationView 具有 leftCalloutaccessory 作为信息按钮。当按下信息按钮时,我想用 UIActivityIndicator . 所以在 calloutAccessoryTapped 代表,我写道 view.leftCalloutaccessoryView = [UIActivityIndicator indicatorWithStyle:UIActivityIndicatorWhite];

    标注附件似乎已更改,但视图似乎没有立即更新。

    当标注附件被隐藏(通过点击另一个别针)并重新打开时,我看到一个微调器。否则,我不会。

    我打过电话 [view setNeedsdisplay] [view setNeedsLayout] [view layoutsubviews] 但也是徒劳的。

    有什么建议/建议吗?

    2 回复  |  直到 12 年前
        1
  •  0
  •   Paul Lynch    14 年前

    我会考虑删除并重新添加您的注释。它看起来有点笨手笨脚,但可能管用。

        2
  •  0
  •   bkurzius    12 年前

    我遇到了一个类似的问题——如果有一个与注释相关联的图像,我需要为LeftCalloutAccessoryView显示一个图像。尝试在mappview:didselectannotationview而不是mappview:viewforannotation中设置它

    -(void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)annotView
    {
        ...
    
        if(imgURL.length>1){            
            // set a thread that will load the image 
            // but don't set the leftCalloutAccessoryView until the image is loaded 
            dispatch_queue_t downloader = dispatch_queue_create("annotation image downloader",NULL);
            dispatch_async(downloader, ^{
                NSURL* photoURL = [NSURL URLWithString:imgURL];
                NSData* photoData = [NSData dataWithContentsOfURL:photoURL];
                UIImage* photoImage = [UIImage imageWithData:photoData];
                dispatch_async(dispatch_get_main_queue(), ^{
                    annotView.leftCalloutAccessoryView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 32, 32)];
                    [(UIImageView *) annotView.leftCalloutAccessoryView setImage:photoImage];
                });                
            });
        }
    }