Перерегистрация AnnotationView - PullRequest
       33

Перерегистрация AnnotationView

0 голосов
/ 29 сентября 2018

A и B - это различные виды MKMarkerAnnotationView классов.В моем MapViewController я регистрирую A следующим образом:

override func viewDidLoad() {
    super.viewDidLoad()
    mapView.delegate = self

    mapView.register(A.self, forAnnotationViewWithReuseIdentifier: MKMapViewDefaultAnnotationViewReuseIdentifier)

    for annotation in annotations {
        mapView.addAnnotation(annotation)
    }
}

У меня есть UISwitch, который я хочу использовать для изменения зарегистрированного AnnotationView с A на B.

@IBAction func didToggleSwitch(_ sender: Any) {

    mapView.register(B.self, forAnnotationViewWithReuseIdentifier: MKMapViewDefaultAnnotationViewReuseIdentifier)

    // remove all annotations
    mapView.removeAnnotations(mapView.annotations)

    //populate all annotations
    for annotation in annotations {
        mapView.addAnnotation(annotation)
    }

}

Зарегистрированный вид не обновляется.Есть идеи, почему?

Редактировать: я заметил, что когда я уменьшаю и перемещаю карту, некоторые аннотации обновляются до нового AnnotationView, а некоторые нет.Я подозреваю, что это связано с использованием reuseIdentifier.Как получить все аннотации для соответствия новому AnnotationView?

1 Ответ

0 голосов
/ 29 сентября 2018

Я понял это.Я создал логическое значение в своем классе MKAnnotation и настроил свойства аннотации в annotationView A на основе этого логического значения.Когда я нажимаю UISwitch, я перебираю все мои объекты аннотаций, переключаю их логическое значение, заново регистрирую annotationView и загружаю их.

...