如何删除MKMapView上的所有注释

时间:2010-06-12 03:44:42

标签: objective-c iphone-sdk-3.0 annotations mkmapview

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

10 个答案:

答案 0 :(得分:241)

是的,这是

[mapView removeAnnotations:mapView.annotations]
  

但是,上一行代码将删除所有地图注释“PINS”   地图,包括用户定位引脚“Blue Pin”。删除所有地图   注释并保留用户位置图钉在地图上,有两个   可能的方法

     

示例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;
}

答案 1 :(得分:36)

这是最简单的方法:

-(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];
}

答案 2 :(得分:17)

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

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;

答案 3 :(得分:13)

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

-(void)removeAllAnnotations
{
    id userAnnotation = self.mapView.userLocation;

    NSMutableArray *annotations = [NSMutableArray arrayWithArray:self.mapView.annotations];
    [annotations removeObject:userAnnotation];

    [self.mapView removeAnnotations:annotations];
}

答案 4 :(得分:11)

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

[mapView removeAnnotations:mapView.annotations]; 

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

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

答案 5 :(得分:6)

Swift版本:

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

答案 6 :(得分:6)

Swift 3

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

答案 7 :(得分:2)

Swift 2.0 简单而且最好:

mapView.removeAnnotations(mapView.annotations)

答案 8 :(得分:0)

要删除一种类型的子类,您可以做

mapView.removeAnnotations(mapView.annotations.filter({$0 is PlacesAnnotation}))

其中PlacesAnnotationMKAnnotation的子类

答案 9 :(得分:0)

这是从MKMapView中删除所有标记和所有路线(如果有)的功能:

 func removeAppleMapOverlays() {
    let overlays = self.appleMapView.overlays
    self.appleMapView.removeOverlays(overlays)
    let annotations = self.appleMapView.annotations.filter {
            $0 !== self.appleMapView.userLocation
        }
    self.appleMapView.removeAnnotations(annotations)
}

干杯