Какой смысл повторно использовать идентификатор для аннотаций - PullRequest
0 голосов
/ 19 сентября 2018

Я пытаюсь внедрить аннотацию в свой mapkit, который я использую

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

Однако я часто вижу такой формат

    func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? {
    guard let annotation = annotation as? Event else { return nil }

    let identifier = "marker"
    var view: MKMarkerAnnotationView

    if let dequeuedView = mapView.dequeueReusableAnnotationView(withIdentifier: identifier)
        as? MKMarkerAnnotationView {
        dequeuedView.annotation = annotation
        view = dequeuedView
    } else {
        view = MKMarkerAnnotationView(annotation: annotation, reuseIdentifier: identifier)
        view.canShowCallout = true
        view.calloutOffset = CGPoint(x: -5, y: 5)
        view.rightCalloutAccessoryView = UIButton(type: .detailDisclosure)
    }
    return view
}

Буду ли яиспользовать последнюю форму, если у меня было более 1 типа аннотаций?

Мне также любопытно, если мой MKMapViewDefaultAnnotationViewReuseIdentifier действителен?Я не выбрал его, но так как у меня есть только 1 тип аннотации, это не должно иметь значения, правильно?

Наконец, идентификатор повторного использования все еще имеет функциональность dequeueReusableAnnotationView(withIdentifier: identifier)?

1 Ответ

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

Здесь нужно учесть много вещей:

  • MKMapViewDefaultAnnotationViewReuseIdentifier поддерживается только на iOS 11 + , поэтому, если вы хотите настроить таргетинг на более раннюю iOS, вы можете захотетьиспользуйте последнюю форму.
  • Нечто похожее на последнюю форму полезно реализовать не только в том случае, если у вас более одного типа аннотаций;смысл использования идентификаторов повторного использования состоит в том, что всякий раз, когда аннотация исчезает с экрана, ее можно повторно использовать в другой аннотации, иногда это экономит много ресурсов.

Итог:

если вы ориентированы только на iOS 11+ и имеете только 1 аннотацию, вы можете использовать MKMapViewDefaultAnnotationViewReuseIdentifier.В противном случае рассмотрите другую форму.

Надеюсь, это поможет вам принять решение.

...