Обновление аннотаций карты на iOS 7 карта вращения камеры

Я пытаюсь сделать так, чтобы при повороте карты iOS 7 аннотации вращались вместе с заголовком камеры. Представьте, что у меня есть аннотации булавок, которые должны всегда указывать на север

Поначалу это может показаться простым, для поворота камеры должен быть MKMapViewDelegate, но его нет.

Я попытался использовать делегатов карты, чтобы затем запросить представление картыcamera.heading объект, но сначала эти делегаты кажутся вызванными только один раз до и один раз после жеста вращения:

- (void)mapView:(MKMapView *)mapView regionWillChangeAnimated:(BOOL)animated
- (void)mapView:(MKMapView *)mapView regionDidChangeAnimated:(BOOL)animated

Я также пытался использовать KVO на объекте camera.heading, но это не работает, и объект камеры, кажется, является своего рода прокси-объектом, который обновляется только после завершения вращения.

Мой самый успешный метод на данный момент - добавить распознаватель жестов вращения для вычисления дельты вращения и использовать его с заголовком камеры, о котором сообщалось в начале делегата изменения региона. Это работает до некоторой степени, но в OS 7 вы можете «щелкнуть» жестом вращения и добавить скорость, которую я не могу отследить. Есть ли способ отслеживать направление камеры в режиме реального времени?

- (void)mapView:(MKMapView *)mapView regionWillChangeAnimated:(BOOL)animated
{
    heading = self.mapView.camera.heading;
}

- (void)rotationHandler:(UIRotationGestureRecognizer *)gesture
{
    if(gesture.state == UIGestureRecognizerStateChanged) {

        CGFloat headingDelta = (gesture.rotation * (180.0/M_PI) );
        headingDelta = fmod(headingDelta, 360.0);

        CGFloat newHeading = heading - headingDelta;

        [self updateCompassesWithHeading:actualHeading];        
    }
}

- (void)mapView:(MKMapView *)mapView regionDidChangeAnimated:(BOOL)animated
{
    [self updateCompassesWithHeading:self.mapView.camera.heading];
}

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

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