MKAnnotationView与卫星地图模式中的图像

时间:2009-12-18 17:03:39

标签: iphone-sdk-3.0 mkpinannotationview

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

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

4 个答案:

答案 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?