如何从 MKMapView 中删除除用户位置注释之外的所有注释



我使用removeAnnotationsmapView中删除我的注释,但同样它会删除用户位置。我怎样才能防止这种情况,或者如何让用户重新查看?

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

从地图视图中删除指定的注释

 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类,请使用 isKindOfClass 以避免删除用户位置注释。

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

否则,您可以设置一个标志来识别– mapView:viewForAnnotation:中的注释类型。

斯威夫特 4.2 或更高版本

在添加批注之前添加此行

mapView.removeAnnotations(mapView.annotations.filter { $0 !== mapView.userLocation })

一些NSPredicate过滤器怎么样?

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

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

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)
    }
}
嗨,

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

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

相关内容

  • 没有找到相关文章

最新更新