在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
。)