我有一个类MapItem它实现MKAnnotation协议。我使用MKMarkerAnnotationView用于在地图上显示注释。
据文档,当设置为nil MKMarkerAnnotationView的glyphText属性,它在所述标记产生销图像。
如果分组注释,我要上标记相同的图钉图像。但是系统默认将其设置为这个集群内聚集注释的数量。
我甚至尝试将此属性设置为无,但没有效果。
func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? {
if let item = annotation as? MapItem {
let annotationView = mapView.dequeueReusableAnnotationView(withIdentifier: "mapItem") as? MKMarkerAnnotationView
?? MKMarkerAnnotationView(annotation: annotation, reuseIdentifier: "mapItem")
annotationView.annotation = item
annotationView.glyphText = nil
annotationView.clusteringIdentifier = "mapItemClustered"
return annotationView
} else if let cluster = annotation as? MKClusterAnnotation {
let clusterView = mapView.dequeueReusableAnnotationView(withIdentifier: "clusterView") as? MKMarkerAnnotationView
?? MKMarkerAnnotationView(annotation: annotation, reuseIdentifier: "clusterView")
clusterView.annotation = cluster
clusterView.glyphText = nil
return clusterView
} else {
return nil
}
}
这就是我要做的事:
class POIMarkerClusterView: MKMarkerAnnotationView {
override var annotation: MKAnnotation? {
willSet {
update(newValue: newValue)
}
}
private func update(newValue: MKAnnotation?) {
if let cluster = newValue as? MKClusterAnnotation {
self.image = POIClusterImage(poiStatistics: poiStatistics, count: count)
// MKMarkerAnnotationView's default rendering usually hides our own image.
// so we make it invisible:
self.glyphText = ""
self.glyphTintColor = UIColor.clear
self.markerTintColor = UIColor.clear
}
}
}
这意味着你可以设置所呈现的注解视图中的任意图像。我动态创建的图像,但你可以从MKMarkerAnnotationView
借用形象,在这里设置它,所以它看起来像您想要的引脚。
主要技巧是使用UIColor.clear
隐藏你不希望看到的。