Анимировать изменение координат аннотации MapKit в Swift?
При использовании MapKit в iOS 8 в Swift, как я могу сделать возможным анимировать изменение положения карты пользовательской аннотации? Я говорю это:
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. Аннотация прыгает, а не анимируется, в новую координатную позицию.
Раздражает то, что анимация работает отлично , если я пишу MyAnnotation в Objective-C. Но если я напишу его в 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()
}
}
1 ответ:
Вы почти угадали! Просто измените эту строку в своей реализации MyAnnotation:
var coordinate : CLLocationCoordinate2D
К этому:
dynamic var coordinate : CLLocationCoordinate2D
Это все исправит.
Почему это имеет значение? Потому что анимация аннотаций основана на KVO (key value observing). В Swift свойство не является ключевым значением, наблюдаемым, если оно не помечено как
dynamic
. (Чтобы получить немного более технически, это в свою очередь потому, что наблюдение кво работает путем swizzling реализации метода установки свойств-время выполнения достигает прямо в ваш класс и изменяет код сеттера этого свойства. Но в Swift это невозможно сделать, если вы явно не пометите свойство какdynamic
.)