Jiayong Ren Calvin
Jiayong Ren Calvin

Reputation: 41

How to rotate MKMapView and keep the Annotation and the view don't rotate?

I am making an MKMapView that shows the user's current location. I want to rotate the map like the Google Maps App without rotating the annotations. Im using the following code

-(void) locationManager:(CLLocationManager *)manager didUpdateHeading:(CLHeading *)newHeading{
     mapView.transform=CGAffineTransformMakeRotation(-1*newHeading.magneticHeading*3.14159/180)};

but the whole view is rotated like this image. The image of the problem in my app

Upvotes: 3

Views: 4461

Answers (2)

Andrey Mishanin
Andrey Mishanin

Reputation: 136

You basically need to apply a the same transform to all annotation views but with negative angle, i.e.

for (id<MKAnnotation> annotation in mapView.annotations) 
{
    MKAnnotationView* annotationView = [mapView viewForAnnotation:annotation];
    [annotationView setTransform:CGAffineTransformMakeRotation(-angle)];
}

If you're planning to add more annotations you should place the same code in mapView:didAddAnnotationViews: too:

- (void)mapView:(MKMapView *)mapView didAddAnnotationViews:(NSArray *)views
{
    for (MKAnnotationView* annotationView in views) 
    {
        [annotationView setTransform:CGAffineTransformMakeRotation(-angle)];
    }
}

Upvotes: 8

Bushra Shahid
Bushra Shahid

Reputation: 3579

All the annotations and callouts that are shown on an MKMapView are subviews of MKMapView so if you rotate the container view all of its subviews are also going to be rotated.

Upvotes: -1

Related Questions