如何删除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) }