如何删除MKMapView上的所有注释

有没有一种简单的方法来删除地图上的所有注释,而无需迭代Objective-c中显示的所有注释?

是的,这里是如何

[mapView removeAnnotations:mapView.annotations] 

但是,上一行代码将从地图中删除所有地图注释“PINS”,包括用户位置引脚“蓝色引脚”。 要删除所有地图注释并将用户位置固定在地图上,有两种可能的方法

例1,保留用户位置注释,删除所有引脚,添加用户位置引脚,但这种方法存在缺陷,会导致用户定位引脚在地图上闪烁,由于删除了引脚后添加背部

 - (void)removeAllPinsButUserLocation1 { id userLocation = [mapView userLocation]; [mapView removeAnnotations:[mapView annotations]]; if ( userLocation != nil ) { [mapView addAnnotation:userLocation]; // will cause user location pin to blink } } 

例2,我个人比较喜欢避免把位置用户引脚放在第一位,

 - (void)removeAllPinsButUserLocation2 { id userLocation = [mapView userLocation]; NSMutableArray *pins = [[NSMutableArray alloc] initWithArray:[mapView annotations]]; if ( userLocation != nil ) { [pins removeObject:userLocation]; // avoid removing user location off the map } [mapView removeAnnotations:pins]; [pins release]; pins = nil; } 

这是最简单的方法:

 -(void)removeAllAnnotations { //Get the current user location annotation. id userAnnotation=mapView.userLocation; //Remove all added annotations [mapView removeAnnotations:mapView.annotations]; // Add the current user location annotation again. if(userAnnotation!=nil) [mapView addAnnotation:userAnnotation]; } 

下面是如何删除所有注释,除了用户的位置,明确写出来,因为我想我会再次寻找这个答案:

 NSMutableArray *locs = [[NSMutableArray alloc] init]; for (id <MKAnnotation> annot in [mapView annotations]) { if ( [annot isKindOfClass:[ MKUserLocation class]] ) { } else { [locs addObject:annot]; } } [mapView removeAnnotations:locs]; [locs release]; locs = nil; 

这与Sandip的答案非常相似,只是它不会重新添加用户位置,所以蓝点不会再闪烁。

 -(void)removeAllAnnotations { id userAnnotation = self.mapView.userLocation; NSMutableArray *annotations = [NSMutableArray arrayWithArray:self.mapView.annotations]; [annotations removeObject:userAnnotation]; [self.mapView removeAnnotations:annotations]; } 

您不需要保存对用户位置的任何引用。 所有需要的是:

 [mapView removeAnnotations:mapView.annotations]; 

只要您将mapView.showsUserLocation设置为YES ,您仍然可以在地图上find用户的位置。 将此属性设置为YES基本上会要求地图视图开始更新并获取用户位置,以便在地图上显示它。 来自MKMapView.h评论:

 // Set to YES to add the user location annotation to the map and start updating its location 

Swift版本:

 func removeAllAnnotations() { let annotations = mapView.annotations.filter { $0 !== self.mapView.userLocation } mapView.removeAnnotations(annotations) } 

Swift 2.0简单而最好的:

 mapView.removeAnnotations(mapView.annotations) 

Swift 3

 if let annotations = self.mapView.annotations { self.mapView.removeAnnotations(annotations) }