设置MKMarkerAnnotationView的glyphText为MKClusterAnnotation

问题描述 投票:3回答:1

我有一个类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
    }
}
swift mapkit ios11 mkannotationview
1个回答
1
投票

这就是我要做的事:

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隐藏你不希望看到的。

© www.soinside.com 2019 - 2024. All rights reserved.