[Swift]注释视图如何始终显示标注

时间:2018-07-22 03:02:50

标签: swift annotations mkmapview

我要始终显示callout中的annotationview,这意味着在加载mapview时,将显示所有注释的callout

我该怎么做?

2 个答案:

答案 0 :(得分:1)

在任何时候,地图上只能有一个标注。框架在要显示新的标注时会重用之前的标注,此处显示的是在添加注释时单个标注视图,就像这样

let annotation = MKPointAnnotation()
annotation.title = "Title for Callout"
mapView.addAnnotation(annotation)

这将导致委托方法viewForAnnotation被触发:

func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? {
    let view = MKAnnotationView(annotation: annotation, reuseIdentifier: "AnnotId")
    view.canShowCallout = true
    return view
}

框架将添加上面返回的视图,并触发didAddViews委托,现在通过选择注释来显示标注视图,就像这样

func mapView(_ mapView: MKMapView, didAdd views: [MKAnnotationView]) {
    if let annotation = views.first(where: { $0.reuseIdentifier == "AnnotId" })?.annotation {
        mapView.selectAnnotation(annotation, animated: true)
    }
}

答案 1 :(得分:0)

  1. 在地图上添加注释:memcmp()
  2. 选择注释memcmp()
  3. 使用代码mapView.addAnnotation(myAnnotation)添加私有功能mapView.selectAnnotation(myAnnotation, animated: false)
  4. 设置MKMapViewDelegate并使用private func bringMyAnnotationToFront()实现两个方法: if let myAnnotation = mapView.annotations.first(where: { $0 is MKPointAnnotation }) { mapview.selectAnnotation(myAnnotation, animated: false) }bringMyAnnotationToFront