如何防止自定义MKAnnotationViews恢复使用默认的颜色和字形图像?

时间:2018-11-13 20:49:54

标签: ios mapkit mkmapview mkannotation mkannotationview

我在UITabBarController的单独选项卡上有一些MKMapViews。每个映射都将自定义MKAnnotationViews用于MKAnnotations和MKClusterAnnotations。自定义的MKAnnotationViews是带有星型字形的绿色,如果是集群,则带有数字的绿色。

问题是我的自定义MKAnnotationViews随即用别针字形随机恢复为默认的红色外观。当我放大时,视图将开始重绘且正确。我一直无法始终如一地重现该问题,但是当我离开选项卡然后返回时,似乎会发生这种情况。

是否有一种方法可以像在集合视图上那样在地图视图上强制重新加载(类似于reloadData())?我的viewForAnnotation函数永远不应该返回nil,所以我不知道这是怎么回事。

 func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? {
     var view = mapView.dequeueReusableAnnotationView(withIdentifier: "CustomAnnotationView") as? CustomAnnotationView
     if view == nil {
         view = CustomAnnotationView(annotation: annotation, reuseIdentifier: "CustomAnnotationView")
     } else {
         view?.annotation = annotation
     }
     return view

     // code for the cluster annotations redacted
 }

1 个答案:

答案 0 :(得分:0)

问题解决了。显然,我需要在集群子类的prepareForReuse函数中设置标记的样式。

override func prepareForReuse() {
    super.prepareForReuse()

    style()
}