Actualizar las anotaciones de mapas en la rotación de la cámara del mapa iOS 7

Estoy intentando conseguirlo para que cuando gire un mapa de iOS 7 las anotaciones giren junto con el encabezado de la cámara. Imagina que tengo anotaciones de pin que deben apuntar al Norte en todo momento.

Esto parece simple al principio, debería haber un MKMapViewDelegate para obtener la rotación de la cámara, pero no lo hay.

He intentado usar los delegados del mapa para luego consultar la vista del mapacamera.heading Objeto, pero en primer lugar, estos delegados solo parecen ser llamados una vez antes y una vez después de un gesto de rotación:

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

También intenté usar KVO en el objeto head.heading de la cámara, pero esto no funciona y el objeto de la cámara parece ser una especie de objeto proxy que solo se actualiza una vez que se completa el gesto de rotación.

Mi método más exitoso hasta ahora es agregar un reconocedor de gestos de rotación para calcular un delta de rotación y usar esto con el encabezado de la cámara informado al comienzo del delegado de cambio de región. Esto funciona hasta cierto punto, pero en OS 7 puedes "mover" tu gesto de rotación y agrega velocidad que parece que no puedo rastrear. ¿Hay alguna forma de seguir el rumbo de la cámara en tiempo real?

- (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];
}

Respuestas a la pregunta(1)

Su respuesta a la pregunta