iOS MapKit更改mapview maptype会导致注释图像更改为pin?

Posted

技术标签:

【中文标题】iOS MapKit更改mapview maptype会导致注释图像更改为pin?【英文标题】:iOS MapKit Changing mapview maptype causes annotation image to change to pin? 【发布时间】:2011-07-06 07:13:56 【问题描述】:

任何关于以下问题的建议将不胜感激。

我正在使用以下代码将自定义图像添加到注释中。

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

    if ([annotation isMemberOfClass:[MKUserLocation class]]) 
     
        return nil; 
     


    if ([annotation isMemberOfClass:[SpectatorPin class]]) 
     
        SpectatorPin *sp = (SpectatorPin *)annotation;
        MKAnnotationView *view = [self.mapView dequeueReusableAnnotationViewWithIdentifier:@"specPin"];
        if (view == nil) 
            view = [[[MKPinAnnotationView alloc] initWithAnnotation:sp reuseIdentifier:@"specPin"] autorelease];
        
        view.image = [UIImage imageNamed:@"mylocation20x20.png"]; 
        view.canShowCallout = YES;
        view.annotation=annotation;
        return view;
    

    //Should not get here
    return nil;


图像最初显示正常。

我有一个可以更改地图类型(标准、卫星、混合)的分段控件。标准是默认值。只要我选择卫星,图像就会立即变为图钉。 mapView:viewforAnnotation 方法不再被调用。

问候,

吉姆

【问题讨论】:

【参考方案1】:

对于自定义图像,您可以使用 MKAnnotationView 而不是 MKPinAnnotationView。

MKAnnotationView *view = [self.mapView dequeueReusableAnnotationViewWithIdentifier:@"specPin"];
        if (view == nil) 
            view = [[[MKAnnotationView alloc] initWithAnnotation:sp reuseIdentifier:@"specPin"] autorelease];
        

【讨论】:

【参考方案2】:

发现这个: iPhone Core Location: Custom pin image disappears when map type changes

与此相关: Why does a custom MKMapView annotation image disappear on touch?

【讨论】:

【参考方案3】:

试试这个:

MKAnnotationView *view = [self.mapView dequeueReusableAnnotationViewWithIdentifier:@"specPin"];
        if (view == nil) 
            view = [[[MKAnnotationView alloc] initWithAnnotation:sp reuseIdentifier:@"specPin"] autorelease];
        

【讨论】:

以上是关于iOS MapKit更改mapview maptype会导致注释图像更改为pin?的主要内容,如果未能解决你的问题,请参考以下文章

无法更改图钉 iOS MapKit 的颜色

iOS开发学习之MapKit

iOS开发学习之MapKit - 获得在MapView(地图)中显示多个标记的区域(MKCoordinateRegion)

从 NIB 为 GeoLocation 加载/创建视图 - IOS 和 MapKit

mapView 中的用户位置未显示在多个模拟器设备(MapKit)上

MapKit iOS 9 detailCalloutAccessoryView 使用