Обновление аннотаций карты на 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];
}