如何删除的MKMapView所有注释除了用户位置标注?(How do I remove all an

2019-06-25 03:43发布

我用removeAnnotations删除从我的注释mapView ,但同样它删除用户的位置安。 我怎样才能避免这种情况,或如何让用户安返回查看?

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

Answer 1:

更新:

当我跟iOS SDK 9试过的用户注释不再删除。 你可以简单地使用

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 )


Answer 2:

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

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

要删除的MapView指定注解

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

}

希望这可以帮助你。



Answer 3:

对于斯威夫特,你可以简单地用一个班轮:

mapView.removeAnnotations(mapView.annotations)

编辑:nielsbot提到也会删除用户的位置标注,除非你已经设置它是这样的:

mapView.showsUserLocation = true


Answer 4:

如果您的用户的位置是一种类的MKUserLocation ,使用isKindOfClass避免删除用户的位置标注。

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

}

否则,你可以设置一个标志,识别那种你的注解– mapView:viewForAnnotation:



Answer 5:

怎么样NSPredicate过滤器?

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

生活总是更好地与NSPredicate过滤器



Answer 6:

雨燕4.1:

一般来说,如果你不想删除您MKUserLocation注释,你可以简单地运行:

self.mapView.removeAnnotations(self.annotations)

该默认方法不删除从该MKUserLocation注解annotations列表。

但是,如果您需要过滤掉所有注释除了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)
    }

}


Answer 7:

嗨试试这个,我得到这个代码的解决方案:

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

 [listRemoveAnnotations release];


文章来源: How do I remove all annotations from MKMapView except the user location annotation?