有没有办法在更改为自定义MKAnnotation数据后更新自定义MKAnnotationView?这是观察者发挥作用的地方(以前没有使用过这些)。
目前我正在手动执行以下操作:
在对数据进行更改后的自定义MKAnnotation中:
let annView: GCCustomAnnotationView = self.mapView.viewForAnnotation(annotation) as! GCCustomAnnotationView
annView.updateText()
在我的自定义MKAnnotationView中:
func updateText() {
let gcAnnotation : GCAnnotation = self.annotation as! GCAnnotation
calloutView.line1.text = gcAnnotation.locality
calloutView.line2.text = gcAnnotation.sublocality
calloutView.line3.text = gcAnnotation.name
}
答案 0 :(得分:3)
您可以实施KVO来观察注释数据的变化。这是MKAnnotationView
类用于观察coordinate
MKAnnotation
属性变化的机制。标准的Swift不使用KVO,它更像是一个ObjectiveC剩余的东西,在Swift中实现起来有点麻烦。我使用的一个简单解决方案是在注释数据发生变化时在自定义注释视图上调用setNeedsDisplay
。这会导致drawRect
被调用。在drawRect
的实现中,您可以轮询注释的数据(就像在代码片段中一样)来更改视图的外观。
很长一段时间,当您的数据发生变化时:
annView.setNeedsDisplay()
就是你所需要的一切。
然后,在您的drawRect
实例的MKAnnotationView
实施中,您调用了updateText
函数:
override func draw(_ rect: CGRect) {
updateText()
// etc.
}