除了用户位置注释之外,如何从MKMapView中删除所有注释?

我使用removeAnnotationsmapView删除我的注释,但它删除用户位置ann。 我怎样才能防止这个,或者如何让用户ann回来查看?

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

更新:

当我尝试使用iOS 9 SDK时,不再删除用户注释。 你可以简单地使用

 mapView.removeAnnotations(mapView.annotations) 

历史回答(针对在iOS 9之前的iOS上运行的应用程序):

尝试这个:

 NSMutableArray * annotationsToRemove = [ mapView.annotations mutableCopy ] ; [ annotationsToRemove removeObject:mapView.userLocation ] ; [ mapView removeAnnotations:annotationsToRemove ] ; 

编辑:迅捷版本

 let annotationsToRemove = mapView.annotations.filter { $0 !== mapView.userLocation } mapView.removeAnnotations( annotationsToRemove ) 

要清除地图上的所有注释:

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

从Mapview中删除指定的注释

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

希望这可以帮助你。

对于Swift,你可以简单地使用一行代码:

 mapView.removeAnnotations(mapView.annotations) 

编辑:由于nielsbot提到它也将删除用户的位置注释,除非你已经这样设置:

 mapView.showsUserLocation = true 

如果您的用户位置是MKUserLocation类的MKUserLocation ,请使用isKindOfClass来避免移除用户位置注释。

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

否则,你可以设置一个标志来识别你的注释的types– mapView:viewForAnnotation:

那么一些NSPredicatefilter呢?

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

用NSPredicatefilter,生活总是更好

嗨,试试这个我从这个代码得到的解决scheme:

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