我在自定义注释视图中添加了几个注释,但我只引用了标记而不是注释视图本身。那么如何更改注释视图元素呢?
答案 0 :(得分:4)
您应该将注释存储在变量中,当您想要更改其视图时,只需使用mapView.removeAnnotation(...)将其从地图中删除,然后使用mapView.addAnnotation(...)再次添加它。 / p>
方法
func mapView(_ mapView: MGLMapView, viewFor annotation: MGLAnnotation) -> MGLAnnotationView? {
}
将被调用,您应该返回已更改的视图。
请注意以下事实:出于性能原因,如果您有大量注释,则不应使用addAnnotation()或removeAnnotation(),而应使用addAnnotations()和removeAnnotations()
答案 1 :(得分:0)
我将所有注释视图添加到字典中
我创建了一个全局词典变量
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"
无需删除和重新添加。
您可能会插入一些较小的内容作为字典的键,例如注解.uid或注解.name之类的内容。我只是使用了整个注释对象