MKPinAnnotationView 无法设置自定义图像

Posted

技术标签:

【中文标题】MKPinAnnotationView 无法设置自定义图像【英文标题】:MKPinAnnotationView unable to set custom image 【发布时间】:2011-07-24 16:48:47 【问题描述】:

我有一个 MKPinAnnotationView,在我的 viewForAnnotation 方法中,我执行以下操作:

customPinView.image = [UIImage imageNamed:@"blah.png"];

我已将 blah.png 添加到我的资源中(通过将文件拖入)

但我仍然看到股票图钉而不是我的图像。难道我做错了什么?完整代码如下:

- (MKAnnotationView *)mapView:(MKMapView *)map viewForAnnotation:(id <MKAnnotation>)annotation

    static NSString *AnnotationViewID = @"annotationViewID";

    MKAnnotationView *annotationView = (MKAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:AnnotationViewID];

    if (annotationView == nil)
    
        annotationView = [[[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:AnnotationViewID] autorelease];
    

    annotationView.image = [UIImage imageNamed:@"blah.png"];
    annotationView.annotation = annotation;

    return annotationView;

【问题讨论】:

在问题中你说你有一个“MKPinAnnotationView”,但在代码中你(正确地)创建了一个“MKAnnotationView”,那是什么? viewForAnnotation 方法是否被调用?也许地图视图的委托没有设置。 这就是问题所在,谢谢。顺便说一句:我可以获得带有自定义图像的标注吗? 你的问题和代码sn-p不匹配。 【参考方案1】:

要获得带有自定义图像的标注,在viewForAnnotation 委托方法中,您可以将leftCalloutAccessoryViewrightCalloutAccessoryView 设置为您的图像(尽管右侧的通常用于显示按钮) :

annotationView.canShowCallout = YES;
UIImage *img = [UIImage imageNamed:@"something.png"];
annotationView.leftCalloutAccessoryView = 
    [[[UIImageView alloc] initWithImage:img] autorelease];

【讨论】:

以上是关于MKPinAnnotationView 无法设置自定义图像的主要内容,如果未能解决你的问题,请参考以下文章

自定义 MKPinAnnotationView 颜色

MKPinAnnotationView 的不同颜色取决于时间

MKPinAnnotationView 子视图不更新

MKPinAnnotationView 不动

拖动 MKPinAnnotationView 抛出错误

MKPinAnnotationView 子类上未调用 drawRect