Анимировать изменение координат аннотации 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, я больше не получаю анимацию!
Просто FYI, вот мой код 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 (наблюдение за ключевым значением). В Swift свойство не является ключевым значением, наблюдаемым, если оно не отмечено как dynamic
. (Чтобы получить немного больше технических, это, в свою очередь, связано с тем, что наблюдение KVO работает, выполняя метод set setter - время выполнения достигает прямо в вашем классе и изменяет этот код настройки свойств. Но в Swift он не может этого сделать если вы явно не помечаете свойство как dynamic
.)