在Swift中animationMapKit注释坐标变化?

在Swift中使用iOS 8中的MapKit时,如何使自定义注释的地图位置变化animation成为可能? 我是这样说的:

UIView.animateWithDuration(0.25) { var loc = ann.coordinate loc.latitude = loc.latitude + 0.0005 loc.longitude = loc.longitude + 0.001 ann.coordinate = loc } 

其中ann是一个自定义注释,MyAnnotation。 注释是跳跃,而不是animation,到新的坐标位置。

令人讨厌的是, 如果我在Objective-C中编写MyAnnotation ,则animation效果非常好。 但是如果我用Swift编写的话,我不会再看到animation了!

只是FYI,这是我的MyInnotation的Swift代码:

 class MyAnnotation : NSObject, MKAnnotation { var coordinate : CLLocationCoordinate2D var title: String! var subtitle: String! init(location coord:CLLocationCoordinate2D) { self.coordinate = coord super.init() } } 

你几乎是正确的! 只需在MyAnnotation实现中更改这一行:

 var coordinate : CLLocationCoordinate2D 

对此:

 dynamic var coordinate : CLLocationCoordinate2D 

这将解决它。

为什么这很重要? 由于注释animation依赖于KVO(键值观察)。 在Swift中,属性不是可观察的关键值,除非它被标记为dynamic 。 (为了获得更多的技术性,反过来是因为KVO观察是通过调整属性setter方法的实现来实现的 – 运行时直接进入你的类并改变了属性的setter代码,但是在Swift中,它不能做到这一点除非你明确地标记这个属性是dynamic 。)