Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/108.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 更改为自定义MKAnnotation数据后,如何更新自定义MKAnnotationView?_Ios_Swift_Mapkit_Mkannotation_Mkannotationview - Fatal编程技术网

Ios 更改为自定义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

在更改为自定义MKAnnotation数据后,是否有方法更新自定义MKAnnotationView?这就是观察者发挥作用的地方(以前从未使用过这些)

例如,目前我正在手动执行以下操作:

在对数据进行更改后的自定义注释中:

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.
}