Swift 中的动画 MapKit 注释坐标变化?

Animate MapKit annotation coordinate change in Swift?

在 iOS 8 in Swift 中使用 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里,我就再也看不到动画了!

仅供参考,这是我的 Swift MyAnnotation 代码:

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(key value observing)。在 Swift 中,一个 属性 不是键值可观察的,除非它被标记为 dynamic。 (为了获得更多技术性,这反过来是因为 KVO 观察通过混合 属性 setter 方法的实现来工作 - 运行时直接进入您的 class 并更改 属性 的 setter 代码。但是在 Swift 中,除非您明确地将 属性 标记为 dynamic,否则它无法执行此操作。)