Answers:
是的,这是
[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;
}
这是最简单的方法:
-(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];
}
以下是删除除用户位置以外的所有注释的方法,这些注释已明确写出,因为我想我会再次寻找该答案:
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;
这与Sandip的答案非常相似,不同之处在于它不会重新添加用户位置,因此蓝点不会再次闪烁。
-(void)removeAllAnnotations
{
id userAnnotation = self.mapView.userLocation;
NSMutableArray *annotations = [NSMutableArray arrayWithArray:self.mapView.annotations];
[annotations removeObject:userAnnotation];
[self.mapView removeAnnotations:annotations];
}
您不需要保存对用户位置的任何引用。所有需要的是:
[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