简体   繁体   中英

Remove user location annotation from mapView

I have to remove all the annotations added to my MKMapView but when I execute :

NSMutableArray *annotationsToRemove = [[NSMutableArray alloc] initWithArray: mapView.annotations];
[mapView removeAnnotations: annotationsToRemove];

The array annotationsToRemove contains a MKUserLocation annotation and it doesn't delete it.

Is there a way to reset the map? I need to delete all the annotations from it!

您可以将mapView的showsUserLocation属性设置为NO。

 mapView.showsUserLocation = NO;

Actually you can not edit MKUserLocation annotation. I mean you can not remove it from map annotation's array as it is a read-only property of MKMapView .

If you visit MKMapView.h class. You will find below line

@property (nonatomic, readonly) MKUserLocation *userLocation;

Here we can see that this property is a read only. So we can not delete it from MKMapView annotations array. How ever you face difficulties in calculation with other annotations then you can runtime hide it.

What I am trying to explain is when user location is not required any more you can set NO for user location property.

For example with your code:

NSMutableArray *annotationsToRemove = [[NSMutableArray alloc] initWithArray: mapView.annotations];
[mapView removeAnnotations: annotationsToRemove];

[self.mapView setShowsUserLocation:NO];
NSLog(@"MapView annotations :%@", mapView.annotations);

Check NSLog output, you will see that MKUserLocation annotation is removed from mapView.annotations array.

It is the simple way I did follow. How ever I am not sure about there is other way to do this. Please leave a comment if you found any other solution.

In the h insert

@property (weak)   MKAnnotationView *ulv;

In the m insert

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

        MKZoomScale currentZoomScale = mapView.bounds.size.width / mapView.visibleMapRect.size.width;
        NSLog(@"current zoom scale is %f",currentZoomScale);

        ulv = [mapView viewForAnnotation:mapView.userLocation];
                if( currentZoomScale > 0.049 ){
                    ulv.hidden = YES;
                }else{
                    ulv.hidden = NO;
                }

    }

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM