是否有一种简单的方法可以删除地图上的所有注释,而无需迭代Objective-c中显示的所有注释?
答案 0 :(得分:241)
是的,这是
[mapView removeAnnotations:mapView.annotations]
但是,上一行代码将删除所有地图注释“PINS” 地图,包括用户定位引脚“Blue Pin”。删除所有地图 注释并保留用户位置图钉在地图上,有两个 可能的方法
示例1,保留用户位置注释,删除所有引脚,添加 用户位置引回,但这种方法有一个缺陷,它 由于删除,将导致用户定位销在地图上闪烁 然后将引脚添加回来
- (void)removeAllPinsButUserLocation1
{
id userLocation = [mapView userLocation];
[mapView removeAnnotations:[mapView annotations]];
if ( userLocation != nil ) {
[mapView addAnnotation:userLocation]; // will cause user location pin to blink
}
}
示例2,我个人更愿意避免删除位置用户引脚 首先,
- (void)removeAllPinsButUserLocation2
{
id userLocation = [mapView userLocation];
NSMutableArray *pins = [[NSMutableArray alloc] initWithArray:[mapView annotations]];
if ( userLocation != nil ) {
[pins removeObject:userLocation]; // avoid removing user location off the map
}
[mapView removeAnnotations:pins];
[pins release];
pins = nil;
}
答案 1 :(得分:36)
这是最简单的方法:
-(void)removeAllAnnotations
{
//Get the current user location annotation.
id userAnnotation=mapView.userLocation;
//Remove all added annotations
[mapView removeAnnotations:mapView.annotations];
// Add the current user location annotation again.
if(userAnnotation!=nil)
[mapView addAnnotation:userAnnotation];
}
答案 2 :(得分:17)
以下是如何删除除用户位置之外的所有注释,明确写出,因为我想我会再来寻找这个答案:
NSMutableArray *locs = [[NSMutableArray alloc] init];
for (id <MKAnnotation> annot in [mapView annotations])
{
if ( [annot isKindOfClass:[ MKUserLocation class]] ) {
}
else {
[locs addObject:annot];
}
}
[mapView removeAnnotations:locs];
[locs release];
locs = nil;
答案 3 :(得分:13)
这与Sandip的答案非常相似,只是它不会重新添加用户位置,因此蓝点不会再次闪烁。
-(void)removeAllAnnotations
{
id userAnnotation = self.mapView.userLocation;
NSMutableArray *annotations = [NSMutableArray arrayWithArray:self.mapView.annotations];
[annotations removeObject:userAnnotation];
[self.mapView removeAnnotations:annotations];
}
答案 4 :(得分:11)
您无需保存对用户位置的任何引用。所需要的只是:
[mapView removeAnnotations:mapView.annotations];
只要您将mapView.showsUserLocation
设置为YES
,您仍然会在地图上拥有用户位置。将此属性设置为YES
基本上要求地图视图开始更新并获取用户位置,以便在地图上显示它。来自MKMapView.h
评论:
// Set to YES to add the user location annotation to the map and start updating its location
答案 5 :(得分:6)
Swift版本:
func removeAllAnnotations() {
let annotations = mapView.annotations.filter {
$0 !== self.mapView.userLocation
}
mapView.removeAnnotations(annotations)
}
答案 6 :(得分:6)
Swift 3
if let annotations = self.mapView.annotations {
self.mapView.removeAnnotations(annotations)
}
答案 7 :(得分:2)
Swift 2.0 简单而且最好:
mapView.removeAnnotations(mapView.annotations)
答案 8 :(得分:0)
要删除一种类型的子类,您可以做
mapView.removeAnnotations(mapView.annotations.filter({$0 is PlacesAnnotation}))
其中PlacesAnnotation
是MKAnnotation
的子类
答案 9 :(得分:0)
这是从MKMapView中删除所有标记和所有路线(如果有)的功能:
func removeAppleMapOverlays() {
let overlays = self.appleMapView.overlays
self.appleMapView.removeOverlays(overlays)
let annotations = self.appleMapView.annotations.filter {
$0 !== self.appleMapView.userLocation
}
self.appleMapView.removeAnnotations(annotations)
}
干杯