3

我成功设置了自定义图像MKAnnotationView来替换引脚(我使用了函数setImage)。但它仅在MKMapView类型为“标准”时才有效。卫星和混合模式始终显示引脚。

有没有人有解决这个奇怪问题的想法?

4

4 回答 4

2

当我尝试更改 MKPinAnnotationView 的图像时,我遇到了完全相同的问题。似乎对 setImage 的调用不是持久的,因为 mapView 不时使用默认图像调用 setImage 。解决方案是将 MKPinAnnotationView 子类化并覆盖 setImage 以始终设置您的自定义图像:

- (void)setImage:(UIImage *)image {
    [super setImage:[UIImage imageNamed:@"MyCustomPinImage.png"]];
}
于 2011-08-13T10:23:40.750 回答
0

要扩展 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 方法中设置图像,它不会丢失(因为它始终是为实例设置的)。

这有帮助吗?

于 2010-02-09T00:40:31.643 回答
0

奇怪的是,两个主题(自定义 MKAnnotationView 和地图模式)都没有链接在一起。

替换引脚的方式看起来很奇怪(setImage ?),“经典”方式是实现

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id )annotation

并在您的委托中返回您的自定义注释视图以履行MKMapViewDelegate协议。

于 2010-01-20T15:26:23.170 回答
0

答案是使用 MKAnnotationView 而不是 MKPinAnnotationView。

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

于 2013-08-08T16:57:43.870 回答