Установить glyphText MKMarkerAnnotationView для MKClusterAnnotation - PullRequest
0 голосов
/ 12 июня 2018

У меня есть класс MapItem, который реализует протокол MKAnnotation.Я использую MKMarkerAnnotationView для отображения аннотаций на карте.

В соответствии с документацией, свойство glyphText MKMarkerAnnotationView, если оно установлено равным nil, создает изображение булавки для маркера.

При кластеризации аннотации, Мне нужно такое же изображение булавки для маркера. Но система по умолчанию устанавливает для этого числа аннотаций, кластеризованных в этом кластере.

Я даже пытался установить это свойство равным nil, но это не дает никакого эффекта.

    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
    }
}

1 Ответ

0 голосов
/ 08 февраля 2019

Вот как я это делаю:

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, чтобы скрытьчто ты не хочешь видеть.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...