可靠地为MKAnnotation

时间:2017-02-09 18:12:28

标签: swift mkmapview mkannotation mkannotationview uiaccessibility

我只需将annotationView传递给MKMapView即可获得annotation {/ 1}}:

view(for annotation: MKAnnotation) -> MKAnnotationView?

返回optional,因为如果注释在屏幕外,则可能没有关联的注释。

是否有可靠的方法始终为给定的MKAnnotationView检索MKAnnotation

我甚至尝试过手动调用MKMapView的委托,但是它用一个模糊的消息来崩溃我的应用程序:

func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? {
    if annotation is MKUserLocation {
        return nil
    }

    return MKPinAnnotationView(annotation: annotation, reuseIdentifier: nil)
}

用例:

我正在开发一种自定义VoiceOver转子,允许用户通过点击屏幕从一个引脚导航到另一个引脚。因此,如果每个大陆上有1个引脚,它们可以向上或向下滑动,地图将在该引脚上居中,而不必平移地图。困难在于我需要告诉自定义转子去哪里,但如果注释在屏幕外,那么还没有与之关联的注释视图,所以我无法正确地指示转子。

1 个答案:

答案 0 :(得分:2)

在我的情况下,我不仅需要MKAnnotationView,而且还需要将地图集中在注释上,所以这对我有用:

// imperative that this is called without animation.
// setCenter will trigger the delegate method mapView(_:viewFor:) immediately
self.mapView.setCenter(requestedAnnotation.coordinate, animated: false)

// by the time we need the view, there's one associated with the annotation
if let annotationView = self.mapView.view(for: requestedAnnotation) {
  // we have an annotationView
}