Reputation: 41
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
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
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