tutorial manager example corelocation ios swift animation mapkit mkannotation

ios - manager - ¿Animate el cambio de coordenadas de la anotación de MapKit en Swift?



location manager swift tutorial (1)

¡Casi lo tienes bien! Simplemente cambie esta línea en su implementación de MyAnnotation:

var coordinate : CLLocationCoordinate2D

a esto:

dynamic var coordinate : CLLocationCoordinate2D

Eso lo arreglará.

¿Por qué importa esto? Debido a que la animación de anotación se basa en KVO (observación del valor clave). En Swift, una propiedad no es un valor clave observable a menos que esté marcado como dynamic . (Para ser un poco más técnico, eso a su vez se debe a que la observación de KVO funciona al alterar la implementación del método de establecimiento de propiedades: el tiempo de ejecución llega directamente a su clase y cambia el código de establecimiento de la propiedad. Pero en Swift no puede hacer eso a menos que marque explícitamente la propiedad como dynamic .)

Cuando utilizo MapKit en iOS 8 en Swift, ¿cómo puedo hacer para animar un cambio en la posición del mapa de una anotación personalizada? Estoy diciendo esto:

UIView.animateWithDuration(0.25) { var loc = ann.coordinate loc.latitude = loc.latitude + 0.0005 loc.longitude = loc.longitude + 0.001 ann.coordinate = loc }

... donde ann es una anotación personalizada, MyAnnotation. La anotación está saltando, no animando, a la nueva posición de coordenadas.

Lo molesto es que la animación funciona perfectamente si escribo MyAnnotation en Objective-C . ¡Pero si lo escribo en Swift, ya no consigo la animación!

Solo para tu información, este es mi código Swift para MyAnnotation:

class MyAnnotation : NSObject, MKAnnotation { var coordinate : CLLocationCoordinate2D var title: String! var subtitle: String! init(location coord:CLLocationCoordinate2D) { self.coordinate = coord super.init() } }