我用removeAnnotations
删除从我的注释mapView
,但同样它删除用户的位置安。 我怎样才能避免这种情况,或如何让用户安返回查看?
NSArray *annotationsOnMap = mapView.annotations;
[mapView removeAnnotations:annotationsOnMap];
我用removeAnnotations
删除从我的注释mapView
,但同样它删除用户的位置安。 我怎样才能避免这种情况,或如何让用户安返回查看?
NSArray *annotationsOnMap = mapView.annotations;
[mapView removeAnnotations:annotationsOnMap];
更新:
当我跟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 )
要清除所有地图中的注释:
[self.mapView removeAnnotations:[self.mapView annotations]];
要删除的MapView指定注解
for (id <MKAnnotation> annotation in self.mapView.annotations)
{
if (![annotation isKindOfClass:[MKUserLocation class]])
{
[self.mapView removeAnnotation:annotation];
}
}
希望这可以帮助你。
对于斯威夫特,你可以简单地用一个班轮:
mapView.removeAnnotations(mapView.annotations)
编辑:nielsbot提到也会删除用户的位置标注,除非你已经设置它是这样的:
mapView.showsUserLocation = true
如果您的用户的位置是一种类的MKUserLocation
,使用isKindOfClass
避免删除用户的位置标注。
if (![annotation isKindOfClass:[MKUserLocation class]]) {
}
否则,你可以设置一个标志,识别那种你的注解– mapView:viewForAnnotation:
怎么样NSPredicate
过滤器?
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"className != %@", NSStringFromClass(MKUserLocation.class)];
NSArray *nonUserAnnotations = [self.mapView.annotations filteredArrayUsingPredicate:predicate];
[self.mapView removeAnnotations:nonUserAnnotations];
生活总是更好地与NSPredicate过滤器
在雨燕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)
}
}
嗨试试这个,我得到这个代码的解决方案:
NSMutableArray*listRemoveAnnotations = [[NSMutableArray alloc] init];
[Mapview removeAnnotations:listRemoveAnnotations];
[listRemoveAnnotations release];