How to rotate MKMapView and keep the Annotation an

2019-03-22 03:34发布

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

2条回答
Ridiculous、
2楼-- · 2019-03-22 03:58

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)];
    }
}
查看更多
Juvenile、少年°
3楼-- · 2019-03-22 04:16

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.

查看更多
登录 后发表回答