我成功设置了自定义图像MKAnnotationView
来替换引脚(我使用了函数setImage
)。但它仅在MKMapView
类型为“标准”时才有效。卫星和混合模式始终显示引脚。
有没有人有解决这个奇怪问题的想法?
我成功设置了自定义图像MKAnnotationView
来替换引脚(我使用了函数setImage
)。但它仅在MKMapView
类型为“标准”时才有效。卫星和混合模式始终显示引脚。
有没有人有解决这个奇怪问题的想法?
当我尝试更改 MKPinAnnotationView 的图像时,我遇到了完全相同的问题。似乎对 setImage 的调用不是持久的,因为 mapView 不时使用默认图像调用 setImage 。解决方案是将 MKPinAnnotationView 子类化并覆盖 setImage 以始终设置您的自定义图像:
- (void)setImage:(UIImage *)image {
[super setImage:[UIImage imageNamed:@"MyCustomPinImage.png"]];
}
要扩展 yonel 的答案,您不能只使用已创建的 MKAnnotationView.image 属性的 setImage 在 MapViewController 的主要部分为其设置新图像。
MapViewController 必须已经实现了 MKMapViewDelgate 方法:
- (MKAnnotationView *)mapView:(MKMapView *)theMapView viewForAnnotation:(id <MKAnnotation>)annotation
在其中,您将在添加注释时从地图上收到通知。
因此,要定制您的 annotationView,您应该扩展 MKAnnotation 并创建自己的注释类。您只需添加此自定义注释实例,让您的 mapView 自动显示此注释类型(即类)的自定义(扩展,即您自己的)annotationView。
也就是说,委托方法会通知您添加了自定义注解,因此您可以在其中检查注解类,如果它是您的注解类,则创建自定义注解视图的新实例。
也就是说,要使用这个 customAnnotation 类的 init 方法:
- (id)initWithAnnotation:(id <MKAnnotation>)annotation reuseIdentifier:(NSString *)identifier
您必须自己实现此方法。
在此方法中,您可以使用 setImage 设置您喜欢的任何图像。这将用于这个 annotationView。
我猜在您的使用中,当 MapType 更改时,设置的图像被清除了,大概这是因为它正在为地图创建一个 annotationView 的新实例(这是一个新地图并再次添加注释并重新创建 annnotationViews来自委托方法)。
如果您在 init 方法中设置图像,它不会丢失(因为它始终是为实例设置的)。
这有帮助吗?
奇怪的是,两个主题(自定义 MKAnnotationView 和地图模式)都没有链接在一起。
替换引脚的方式看起来很奇怪(setImage ?),“经典”方式是实现
- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id )annotation
并在您的委托中返回您的自定义注释视图以履行MKMapViewDelegate
协议。
答案是使用 MKAnnotationView 而不是 MKPinAnnotationView。