How do I remove all annotations from MKMapView except the user location annotation?
Update:
When I tried with the iOS 9 SDK the user annotation is no longer removed. You can simply use
mapView.removeAnnotations(mapView.annotations)
Historical answer (for apps that run on iOS before iOS 9):
Try this:
NSMutableArray * annotationsToRemove = [ mapView.annotations mutableCopy ] ;
[ annotationsToRemove removeObject:mapView.userLocation ] ;
[ mapView removeAnnotations:annotationsToRemove ] ;
EDIT: Swift version
let annotationsToRemove = mapView.annotations.filter { $0 !== mapView.userLocation }
mapView.removeAnnotations( annotationsToRemove )
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.
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