我使用removeAnnotations
从mapView
删除我的注释,但同样删除用户位置ann。如何防止这种情况,或者如何让用户回来查看?
NSArray *annotationsOnMap = mapView.annotations;
[mapView removeAnnotations:annotationsOnMap];
答案 0 :(得分:86)
更新
当我尝试使用iOS 9 SDK时,不再删除用户注释。你可以简单地使用
mapView.removeAnnotations(mapView.annotations)
历史答案(适用于在iOS 9之前在iOS上运行的应用):
试试这个:
NSMutableArray * annotationsToRemove = [ mapView.annotations mutableCopy ] ;
[ annotationsToRemove removeObject:mapView.userLocation ] ;
[ mapView removeAnnotations:annotationsToRemove ] ;
编辑:Swift版
let annotationsToRemove = mapView.annotations.filter { $0 !== mapView.userLocation }
mapView.removeAnnotations( annotationsToRemove )
答案 1 :(得分:20)
清除地图上的所有注释:
[self.mapView removeAnnotations:[self.mapView annotations]];
从Mapview中删除指定的注释
for (id <MKAnnotation> annotation in self.mapView.annotations)
{
if (![annotation isKindOfClass:[MKUserLocation class]])
{
[self.mapView removeAnnotation:annotation];
}
}
希望这可以帮助你。
答案 2 :(得分:7)
对于Swift,你可以简单地使用单行:
mapView.removeAnnotations(mapView.annotations)
编辑:正如nielsbot所提到的,除非你像这样设置它,否则它也会删除用户的位置注释:
mapView.showsUserLocation = true
答案 3 :(得分:3)
如果您的用户位置属于MKUserLocation
类,请使用isKindOfClass
以避免删除用户位置注释。
if (![annotation isKindOfClass:[MKUserLocation class]]) {
}
否则,您可以设置一个标记,以便在– mapView:viewForAnnotation:
中识别您的注释类型。
答案 4 :(得分:1)
Swift 4.2或更高版本
在添加注释之前添加此行
mapView.removeAnnotations(mapView.annotations.filter { $0 !== mapView.userLocation })
答案 5 :(得分:0)
某些NSPredicate
过滤器怎么样?
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"className != %@", NSStringFromClass(MKUserLocation.class)];
NSArray *nonUserAnnotations = [self.mapView.annotations filteredArrayUsingPredicate:predicate];
[self.mapView removeAnnotations:nonUserAnnotations];
NSPredicate过滤器的生活总是更好
答案 6 :(得分:0)
在 Swift 4.1 中:
通常,如果您不想删除您的 MKUserLocation 批注,则只需运行:
self.mapView.removeAnnotations(self.annotations)
。
默认情况下,此方法不会从annotations
列表中删除 MKUserLocation 批注。
但是,如果出于任何其他原因(例如,以所有注释为中心),则需要过滤除 MKUserLocation (请参见下面的annotationsNoUserLocation
变量)以外的所有注释,但是 MKUserLocation 批注,您可以在下面使用此简单扩展名。
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)
}
}
答案 7 :(得分:-1)
嗨试试这个,我从这段代码中得到了解决方案:
NSMutableArray*listRemoveAnnotations = [[NSMutableArray alloc] init];
[Mapview removeAnnotations:listRemoveAnnotations];
[listRemoveAnnotations release];