40

removeAnnotations用来删除我的注释,mapView但同样删除用户位置 ann。我该如何防止这种情况,或者如何让用户 ann 重新查看?

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

8 回答 8

97

更新:

当我尝试使用 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 )
于 2012-06-03T03:16:40.923 回答
22

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

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

从 Mapview 中删除指定的注释

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

}

希望这可以帮助你。

于 2013-02-19T04:04:04.400 回答
7

对于 Swift,您可以简单地使用单线:

mapView.removeAnnotations(mapView.annotations)

编辑:正如 nielsbot 所提到的,它还将删除用户的位置注释,除非您像这样设置它:

mapView.showsUserLocation = true
于 2015-06-18T13:49:26.170 回答
3

如果您的用户位置属于 类MKUserLocation,请使用isKindOfClass以避免删除用户位置注释。

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

}

否则,您可以设置一个标志来识别– mapView:viewForAnnotation:.

于 2012-06-03T03:13:08.813 回答
1

Swift 4.2 或更高版本

在添加注释之前添加此行

mapView.removeAnnotations(mapView.annotations.filter { $0 !== mapView.userLocation })
于 2019-11-27T09:29:00.577 回答
0

NSPredicate加个过滤器怎么样?

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

使用 NSPredicate 过滤器,生活总是更美好

于 2016-07-14T20:24:37.997 回答
0

Swift 4.1中:

通常,如果您不想删除MKUserLocation注释,您可以简单地运行:

self.mapView.removeAnnotations(self.annotations).

默认情况下,此方法不会从列表中删除MKUserLocation注释。annotations

但是,如果您出于任何其他原因需要过滤除MKUserLocation之外的所有注释(请参见下面的变量),例如以除MKUserLocation注释之外的所有注释为中心,您可以在下面使用这个简单的扩展。annotationsNoUserLocation

extension MKMapView {

    var annotationsNoUserLocation : [MKAnnotation] {
        get {
            return self.annotations.filter{ !($0 is MKUserLocation) }
        }
    }

    func showAllAnnotations() {
        self.showAnnotations(self.annotations, animated: true)
    }

    func removeAllAnnotations() {
        self.removeAnnotations(self.annotations)
    }

    func showAllAnnotationsNoUserLocation() {
        self.showAnnotations(self.annotationsNoUserLocation, animated: true)
    }

}
于 2018-10-31T14:20:19.033 回答
-1

嗨试试这个我从这段代码中得到了解决方案:

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

 [listRemoveAnnotations release];
于 2012-11-30T06:46:35.853 回答