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

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中,它不能这样做除非您将属性显式标记为动态.)

相关文章

UITabBarController 是 iOS 中用于管理和显示选项卡界面的一...
UITableView的重用机制避免了频繁创建和销毁单元格的开销,使...
Objective-C中,类的实例变量(instance variables)和属性(...
从内存管理的角度来看,block可以作为方法的传入参数是因为b...
WKWebView 是 iOS 开发中用于显示网页内容的组件,它是在 iO...
OC中常用的多线程编程技术: 1. NSThread NSThread是Objecti...