从mapView中删除用户位置注释

时间:2014-11-16 13:56:19

标签: ios iphone mkmapview mkuserlocation

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

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

数组annotationsToRemove包含MKUserLocation注释,并且它不会删除它。

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

3 个答案:

答案 0 :(得分:4)

您只需将mapView的showsUserLocation属性设置为NO。

即可
 mapView.showsUserLocation = NO;

答案 1 :(得分:0)

实际上您无法编辑MKUserLocation注释。我的意思是你无法从地图注释的数组中删除它,因为它是read-only的{​​{1}}属性。

如果您访问MKMapView课程。你会在下面找到

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注释。

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

答案 2 :(得分: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;
                }

    }