【问题标题】:MKAnnotationViews with image in satellite map modeMKAnnotationView 与卫星地图模式下的图像
【发布时间】:2010-12-28 02:56:10
【问题描述】:

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

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

【问题讨论】:

    标签: iphone-sdk-3.0 mkpinannotationview


    【解决方案1】:

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

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

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

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

    【讨论】:

      【解决方案2】:

      要扩展 yonel 的答案,您不能只使用已创建的 MKAnnotationView.image 属性的 setImage 在 MapViewController 的主要部分为其设置新图像。

      MapViewController 必须实现了 MKMapViewDelgate 方法:

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

      在其中,当添加注释时,地图会通知您。

      因此,要定制您的 annotationView,您应该扩展 MKAnnotation 并创建自己的 annotation 类。您只需添加此自定义注释实例,即可让您的 mapView 自动显示此注释类型(即类)的自定义(扩展,即您自己的)annotationView。

      也就是说,委托方法会通知您添加了自定义注解,因此您可以在其中检查注解类,如果它是您的注解类,则创建自定义注解视图的新实例。

      即使用这个customAnnotation类的init方法为:

      - (id)initWithAnnotation:(id <MKAnnotation>)annotation reuseIdentifier:(NSString *)identifier
      

      你必须自己实现这个方法。

      在此方法中,您可以使用 setImage 设置您喜欢的任何图像。这将用于这个 annotationView。

      我猜在您的使用中,当 MapType 更改时,设置的图像被清除了,大概这是因为它正在为地图创建一个 annotationView 的新实例(这是一个新地图并再次添加注释并重新- 从委托方法创建注释视图)。

      如果你在 init 方法中设置图片,它不会丢失(因为它总是为实例设置的)。

      这有帮助吗?

      【讨论】:

        【解决方案3】:

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

        - (void)setImage:(UIImage *)image {
            [super setImage:[UIImage imageNamed:@"MyCustomPinImage.png"]];
        }
        

        【讨论】:

          【解决方案4】:

          答案是使用 MKAnnotationView 而不是 MKPinAnnotationView。

          iOS MapKit Changing mapview maptype causes annotation image to change to pin?

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2010-10-04
            • 1970-01-01
            • 2021-08-31
            • 2011-04-24
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2010-11-29
            相关资源
            最近更新 更多