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