How do I remove all annotations from MKMapView exc

2019-02-01 09:53发布

I use removeAnnotations to remove my annotations from mapView but same it remove user location ann. How can I prevent this, or how to get user ann back to view?

NSArray *annotationsOnMap = mapView.annotations;
        [mapView removeAnnotations:annotationsOnMap];

7条回答
Luminary・发光体
2楼-- · 2019-02-01 10:11

For Swift you can simply use a one-liner:

mapView.removeAnnotations(mapView.annotations)

Edit: As nielsbot mentioned it will also remove the user's location annotation unless you have set it up like this:

mapView.showsUserLocation = true
查看更多
霸刀☆藐视天下
3楼-- · 2019-02-01 10:12

In Swift 4.1:

Normally if you don't want to remove your MKUserLocation annotation you can simply run:

self.mapView.removeAnnotations(self.annotations).

This method by default does not remove the MKUserLocation annotation from the annotations list.

However if you need to filter out all annotations except the MKUserLocation (see annotationsNoUserLocation variable below) for any other reason, like centering on all the annotations but the MKUserLocation annotation you can use this simple extension below.

extension MKMapView {

    var annotationsNoUserLocation : [MKAnnotation] {
        get {
            return self.annotations.filter{ !($0 is MKUserLocation) }
        }
    }

    func showAllAnnotations() {
        self.showAnnotations(self.annotations, animated: true)
    }

    func removeAllAnnotations() {
        self.removeAnnotations(self.annotations)
    }

    func showAllAnnotationsNoUserLocation() {
        self.showAnnotations(self.annotationsNoUserLocation, animated: true)
    }

}
查看更多
在下西门庆
4楼-- · 2019-02-01 10:16

Hi try this i got the solution from this code:

 NSMutableArray*listRemoveAnnotations = [[NSMutableArray alloc] init];
[Mapview removeAnnotations:listRemoveAnnotations];

 [listRemoveAnnotations release];
查看更多
Evening l夕情丶
5楼-- · 2019-02-01 10:21

How about some NSPredicate filter?

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"className != %@", NSStringFromClass(MKUserLocation.class)];
NSArray *nonUserAnnotations = [self.mapView.annotations filteredArrayUsingPredicate:predicate];
[self.mapView removeAnnotations:nonUserAnnotations];

Life is always better with NSPredicate filter

查看更多
▲ chillily
6楼-- · 2019-02-01 10:22

To clear all the annotations from the map:

[self.mapView removeAnnotations:[self.mapView annotations]];

To remove specified annotations from Mapview

 for (id <MKAnnotation> annotation in self.mapView.annotations)
{
    if (![annotation isKindOfClass:[MKUserLocation class]])
    {
              [self.mapView removeAnnotation:annotation];   
    }

}

Hope this may help you.

查看更多
Animai°情兽
7楼-- · 2019-02-01 10:26

If your user location is kind of class of MKUserLocation, use isKindOfClass to avoid removing user location annotation.

if (![annotation isKindOfClass:[MKUserLocation class]]) {

}

Else you can set a flag to recognize the kind of your annotations in – mapView:viewForAnnotation:.

查看更多
登录 后发表回答