我添加了几个带有自定义注释视图的注释,但我只引用了标记而不是注释视图本身。那么如何更改注释视图元素呢?
您应该将注释存储在变量中,当您想要更改它们的视图时,只需使用mapView.removeAnnotation(...)将它们从地图中删除,然后使用mapView.addAnnotation(...)再次添加它。
方法
func mapView(_ mapView: MGLMapView, viewFor annotation: MGLAnnotation) -> MGLAnnotationView? {
}
将被调用,您应该返回已更改的视图。
请注意,出于性能原因,如果您有大量注释,则不应使用addAnnotation()或removeAnnotation(),而应使用addAnnotations()和removeAnnotations()
我将所有注释视图添加到字典中
我创建了一个全局字典变量
var annotationViews = [CustomAnnotation:CustomAnnotationView]()
然后在我的委托函数中创建每个注释视图
func mapView(_ mapView: MGLMapView, viewFor annotation: MGLAnnotation) -> MGLAnnotationView?
我把它添加到我的字典中
let annotationView = MyAnnotationView(reuseIdentifier: rid, size: CGSize(width: 45, height: 45), annotation: annotation)
annotationViews[annotation as! MyAnnotation] = annotationView
后来当我想在注释视图中更改文本视图的文本时,我在字典调用中使用了我的注释。这返回了与之对应的注释视图。
self.annotationViews[anno]?.textView.text = "My new text view status"
不需要删除和重新添加。
你可以插入一些较小的东西作为字典的键,比如annotation.uid或annotation.name等。我只是使用了整个注释对象