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

时间:2015-04-21 15:24:15

标签: ios swift animation mapkit mkannotation

在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中写它,我就不再动画了!

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

class MyAnnotation : NSObject, MKAnnotation {
    var coordinate : CLLocationCoordinate2D
    var title: String!
    var subtitle: String!

    init(location coord:CLLocationCoordinate2D) {
        self.coordinate = coord
        super.init()
    }
}

1 个答案:

答案 0 :(得分:60)

你差不多了!只需在MyAnnotation实现中更改此行:

var coordinate : CLLocationCoordinate2D

到此:

dynamic var coordinate : CLLocationCoordinate2D

这将解决它。

为什么这很重要?因为注释动画依赖于KVO(键值观察)。在Swift中,属性不是可观察的键值,除非它被标记为dynamic。 (为了获得更多的技术,反过来是因为KVO观察通过调整属性setter方法的实现来运行 - 运行时到达你的类并改变该属性的setter代码。但是在Swift中,它可以&除非您明确将该属性标记为dynamic,否则,请执行此操作。)