除了用户位置注释之外,如何从MKMapView中删除所有注释?
我使用removeAnnotations
从mapView
删除我的注释,但它删除用户位置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:
那么一些NSPredicate
filter呢?
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];