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
,否则它无法执行此操作。)
在 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
,否则它无法执行此操作。)