在
Swift中的iOS 8中使用MapKit时,如何使自定义注释的地图位置更改动画成为可能?我在说:
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.注释是跳跃,而不是动画,到新的坐标位置.
令人讨厌的事情是,如果我在Objective-C中编写MyAnnotation,动画效果会很好.但是如果我写在Swift,我再也不会得到动画了!
就在FYI,这里是MyExnotation的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
这将修复它.
为什么这么重要?因为注释动画依赖于KVO(键值观察).在Swift中,除非将其标记为动态,否则属性不是关键值. (要获得更多的技术性,这反过来又是因为KVO观察通过调整属性设置器方法的实现来实现 – 运行时到达你的类并且改变了该属性的setter代码,但是在Swift中,它不能这样做除非您将属性显式标记为动态.)