Ios 更改为自定义MKAnnotation数据后,如何更新自定义MKAnnotationView?
在更改为自定义MKAnnotation数据后,是否有方法更新自定义MKAnnotationView?这就是观察者发挥作用的地方(以前从未使用过这些) 例如,目前我正在手动执行以下操作: 在对数据进行更改后的自定义注释中:Ios 更改为自定义MKAnnotation数据后,如何更新自定义MKAnnotationView?,ios,swift,mapkit,mkannotation,mkannotationview,Ios,Swift,Mapkit,Mkannotation,Mkannotationview,在更改为自定义MKAnnotation数据后,是否有方法更新自定义MKAnnotationView?这就是观察者发挥作用的地方(以前从未使用过这些) 例如,目前我正在手动执行以下操作: 在对数据进行更改后的自定义注释中: let annView: GCCustomAnnotationView = self.mapView.viewForAnnotation(annotation) as! GCCustomAnnotationView annView.updateText() 在自定义MKA
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
}
您可以实现KVO来观察注释数据中的更改。这是
MKAnnotationView
类用来观察MKAnnotation
的coordinate
属性变化的机制。标准Swift不使用KVO,它更像是ObjectiveC遗留的东西,在中实现起来有点麻烦。我使用的一个简单解决方案是,当注释的数据发生更改时,在自定义注释视图上调用setNeedsDisplay
。这将导致调用drawRect
。然后,在drawRect
的实现中,可以轮询注释的数据(就像在代码片段中所做的那样),以更改视图的外观
长话短说,当您的数据发生变化时:
annView.setNeedsDisplay()
这就是你需要的一切
然后在子类MKAnnotationView
实例的drawRect
实现中,调用updateText
函数:
override func draw(_ rect: CGRect) {
updateText()
// etc.
}