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()
}
}