Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to remove all annotations from MKMapView without removing the blue dot?

I would like to remove all annotations from my mapview without the blue dot of my position. When I call:

[mapView removeAnnotations:mapView.annotations]; 

all annotations are removed.

In which way can I check (like a for loop on all the annotations) if the annotation is not the blue dot annotation?

EDIT (I've solved with this):

for (int i =0; i < [mapView.annotations count]; i++) {      if ([[mapView.annotations objectAtIndex:i] isKindOfClass:[MyAnnotationClass class]]) {                                [mapView removeAnnotation:[mapView.annotations objectAtIndex:i]];         }      } 
like image 711
Mat Avatar asked Jan 25 '10 12:01

Mat


2 Answers

Looking at the MKMapView documentation, it seems like you have the annotations property to play with. It should be pretty simple to iterate through this and see what annotations you have :

for (id annotation in myMap.annotations) {     NSLog(@"%@", annotation); } 

You also have the userLocation property which gives you the annotation representing the user's location. If you go through the annotations and remember all of them which are not the user location, you can then remove them using the removeAnnotations: method :

NSInteger toRemoveCount = myMap.annotations.count; NSMutableArray *toRemove = [NSMutableArray arrayWithCapacity:toRemoveCount]; for (id annotation in myMap.annotations)     if (annotation != myMap.userLocation)         [toRemove addObject:annotation]; [myMap removeAnnotations:toRemove]; 

Hope this helps,

Sam

like image 68
deanWombourne Avatar answered Sep 20 '22 23:09

deanWombourne


If you like quick and simple, there's a way to filter an array of the MKUserLocation annotation. You can pass this into MKMapView's removeAnnotations: function.

 [_mapView.annotations filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"!(self isKindOfClass: %@)", [MKUserLocation class]]]; 

I assume this is pretty much the same as the manual filters posted above, except using a predicate to do the dirty work.

like image 21
Sebastian Bean Avatar answered Sep 20 '22 23:09

Sebastian Bean