Перетаскиваемые аннотации iOS MapKit (MKAnnotationView) больше не панорамируются с картой

я учусь использовать MapKit в своем новом iOS-приложении. Я'м, используя некоторые из моих модельных объектов в качестве аннотаций (добавил протокол к их заголовку файла). Я также создаю пользовательские MKAnnotationViews и устанавливаюdraggable собственность на.YES

Моя модель объекта имеетlocation свойство, которое являетсяCLLocation*, Чтобы соответствовать Протокол, я добавил следующее к этому объекту:

- (CLLocationCoordinate2D) coordinate {
    return self.location.coordinate;
}

- (void) setCoordinate:(CLLocationCoordinate2D)newCoordinate {
    CLLocation* newLocation = [[CLLocation alloc]
        initWithCoordinate: newCoordinate
        altitude: self.location.altitude
        horizontalAccuracy: self.location.horizontalAccuracy
        verticalAccuracy: self.location.verticalAccuracy
        timestamp: nil];
    self.location = newLocation;
}

- (NSString*) title {
    return self.name;
}

- (NSString*) subtitle {
    return self.serialID;
}

Итак, у меня есть 4 обязательных метода. И они'довольно просто. Когда я читаю документы Apple наMKAnnotationView и@draggable собственности, он говорит следующее:

Установка этого свойства в YES делает аннотацию перетаскиваемой пользователем. Если ДА, связанный объект аннотации также должен реализовывать метод setCoordinate :. Значение по умолчанию этого свойства - НЕТ.

И в других местахMKAnnotation документы говорят:

Ваша реализация этого свойства должна соответствовать наблюдению значения ключа (KVO). Для получения дополнительной информации о том, как реализовать поддержку KVO, см. Руководство по программированию наблюдения значения ключа.

Я прочитал этот (краткий) документ, и мне совершенно не ясно, что яЯ должен сделать, чтобы сделать это так, чтобыcoordinateчто ям вытекает из моегоlocation собственность является собственностью сама по себе.

Но я'Я вполне уверен, что этоне работает правильно. Когда я перетаскиваю булавку, она перемещается, но при перемещении карты она больше не перемещается.

ОБНОВИТЬ

Поэтому я попробовал поиграть со стоковой MKPinAnnotationView. Для этого я просто закомментировал свой делегатmapView:viewForAnnotation: метод. Я обнаружил, что это непо умолчанию. Я добавилmapView:didAddAnnotationViews: моему делегату, чтобы установитьdraggable свойство добавленных просмотров.YES

После настройки таким образом представления Pin, как намекает Джон Эстропия ниже, кажутся работающими нормально. Я решил использоватьmapView:annotationView:didChangeDragState:fromOldState: Хук делегата, чтобы ближе познакомиться с тем, что происходит:

- (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)annotationView didChangeDragState:(MKAnnotationViewDragState)newState fromOldState:(MKAnnotationViewDragState)oldState {
    NSArray* states = @[@"None", @"Starting", @"Dragging", @"Cancelling", @"Ending"];
    NSLog(@"dragStateChangeFrom: %@ to: %@", states[oldState], states[newState]);
}

Для биржевых штифтов вы увидите вывод журнала, который выглядит следующим образом:

2014-02-05 09:07:45.924 myValve[1781:60b] dragStateChangeFrom: None to: Starting
2014-02-05 09:07:46.249 myValve[1781:60b] dragStateChangeFrom: Starting to: Dragging
2014-02-05 09:07:47.601 myValve[1781:60b] dragStateChangeFrom: Dragging to: Ending
2014-02-05 09:07:48.006 myValve[1781:60b] dragStateChangeFrom: Ending to: None

Что выглядит довольно логично. Но если вы переключитесь на настроенныйMKAnnotationView, результат, который вы увидите, выглядит так:

2014-02-05 09:09:41.389 myValve[1791:60b] dragStateChangeFrom: None to: Starting
2014-02-05 09:09:45.451 myValve[1791:60b] dragStateChangeFrom: Starting to: Ending

Он пропускает ДВА перехода, от начала до перетаскивания, и от окончания до None.

Поэтому я начинаю скептически относиться к тому, что мне нужно сделать что-то другое со свойствами. Но я'Я до сих пор разочарован тем, почему это победилот работа.

ОБНОВЛЕНИЕ 2

Я создал свой собственныйAnnotation объект стоять между объектами моей модели, которые могут иметь свойствоcoordinate имущество. Поведение остается прежним. Кажется, что-то с.MKAnnotationView

Ответы на вопрос(4)

Ваш ответ на вопрос