Animate MapKit annotation coordinate change in Swift? - Printable Version +- 0Day Forums (https://zeroday.vip) +-- Forum: Coding (https://zeroday.vip/Forum-Coding) +--- Forum: Swift (https://zeroday.vip/Forum-Swift) +--- Thread: Animate MapKit annotation coordinate change in Swift? (/Thread-Animate-MapKit-annotation-coordinate-change-in-Swift) |
Animate MapKit annotation coordinate change in Swift? - marieuzmridi - 07-19-2023 When using MapKit in iOS 8 in Swift, how do I make it possible to animate a change in the map position of a custom annotation? I am saying this: UIView.animateWithDuration(0.25) { var loc = ann.coordinate loc.latitude = loc.latitude + 0.0005 loc.longitude = loc.longitude + 0.001 ann.coordinate = loc } ...where `ann` is a custom annotation, MyAnnotation. The annotation is jumping, not animating, to the new coordinate position. **The annoying thing is that the animation works perfectly _if I write MyAnnotation in Objective-C_. But if I write it in Swift, I don't get the animation any more!** Just FYI, here is my Swift code for MyAnnotation: class MyAnnotation : NSObject, MKAnnotation { var coordinate : CLLocationCoordinate2D var title: String! var subtitle: String! init(location coord:CLLocationCoordinate2D) { self.coordinate = coord super.init() } } RE: Animate MapKit annotation coordinate change in Swift? - amary742 - 07-19-2023 You almost have it right! Just change this line in your MyAnnotation implementation: var coordinate : CLLocationCoordinate2D to this: dynamic var coordinate : CLLocationCoordinate2D That will fix it. Why does this matter? Because annotation animation relies on KVO (key value observing). In Swift, a property is not key value observable unless it is marked as `dynamic`. (To get a little more technical, that in turn is because KVO observation works by swizzling the implementation of the property setter method - the runtime reaches right into your class and changes that property's setter code. But in Swift, it can't do that unless you explicitly mark the property as `dynamic`.) |