Подтвердить что ты не робот

Анимировать изменение координат аннотации 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()
    }
}
4b9b3361

Ответ 1

У тебя почти все правильно! Просто измените эту строку в своей реализации MyAnnotation:

var coordinate : CLLocationCoordinate2D

:

dynamic var coordinate : CLLocationCoordinate2D

Это исправит.

Почему это имеет значение? Поскольку анимация аннотаций зависит от KVO (наблюдение за ключевым значением). В Swift свойство не является ключевым значением, наблюдаемым, если оно не отмечено как dynamic. (Чтобы получить немного больше технических, это, в свою очередь, связано с тем, что наблюдение KVO работает, выполняя метод set setter - время выполнения достигает прямо в вашем классе и изменяет этот код настройки свойств. Но в Swift он не может этого сделать если вы явно не помечаете свойство как dynamic.)