1

我必须删除添加到我的 MKMapView 的所有注释,但是当我执行时:

NSMutableArray *annotationsToRemove = [[NSMutableArray alloc] initWithArray: mapView.annotations];
[mapView removeAnnotations: annotationsToRemove];

数组 annotationsToRemove 包含一个MKUserLocation注释,它不会删除它。

有没有办法重置地图?我需要从中删除所有注释!

4

3 回答 3

4

您可以将 mapView 的showsUserLocation属性设置为 NO。

 mapView.showsUserLocation = NO;
于 2014-11-16T15:30:37.493 回答
0

实际上你不能编辑MKUserLocation注释。我的意思是你不能从地图注释的数组中删除它,因为它read-onlyMKMapView.

如果你去MKMapView.h上课。你会发现下面的行

@property (nonatomic, readonly) MKUserLocation *userLocation;

在这里我们可以看到这个属性是只读的。所以我们不能从MKMapView注释数组中删除它。无论您如何在使用其他注释进行计算时遇到困难,您都可以在运行时隐藏它。

我要解释的是,当不再需要用户位置时,您可以NO为用户位置属性设置。

例如使用您的代码:

NSMutableArray *annotationsToRemove = [[NSMutableArray alloc] initWithArray: mapView.annotations];
[mapView removeAnnotations: annotationsToRemove];

[self.mapView setShowsUserLocation:NO];
NSLog(@"MapView annotations :%@", mapView.annotations);

检查NSLog输出,您将看到MKUserLocation注释已从mapView.annotations数组中删除。

这是我遵循的简单方法。我如何不确定是否有其他方法可以做到这一点。如果您发现任何其他解决方案,请发表评论。

于 2014-11-17T10:41:33.513 回答
0

在 h 插入

@property (weak)   MKAnnotationView *ulv;

在 m 插入

 - (void)mapView:(MKMapView *)mapView regionWillChangeAnimated:(BOOL)animated {

        MKZoomScale currentZoomScale = mapView.bounds.size.width / mapView.visibleMapRect.size.width;
        NSLog(@"current zoom scale is %f",currentZoomScale);

        ulv = [mapView viewForAnnotation:mapView.userLocation];
                if( currentZoomScale > 0.049 ){
                    ulv.hidden = YES;
                }else{
                    ulv.hidden = NO;
                }

    }
于 2016-02-14T08:43:59.540 回答