Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/104.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 从mapView中删除用户位置注释_Ios_Iphone_Mkmapview_Mkuserlocation - Fatal编程技术网

Ios 从mapView中删除用户位置注释

Ios 从mapView中删除用户位置注释,ios,iphone,mkmapview,mkuserlocation,Ios,Iphone,Mkmapview,Mkuserlocation,我必须删除添加到MKMapView的所有注释,但执行时: NSMutableArray *annotationsToRemove = [[NSMutableArray alloc] initWithArray: mapView.annotations]; [mapView removeAnnotations: annotationsToRemove]; 数组annotationsToRemove包含一个MKUserLocation注释,它不会删除它 有没有办法重置地图?我需要删除它的所有注释

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

NSMutableArray *annotationsToRemove = [[NSMutableArray alloc] initWithArray: mapView.annotations];
[mapView removeAnnotations: annotationsToRemove];
数组annotationsToRemove包含一个
MKUserLocation
注释,它不会删除它

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

您只需将mapView的属性设置为“否”

 mapView.showsUserLocation = NO;
只需将mapView的属性设置为“否”

 mapView.showsUserLocation = NO;

实际上,您不能编辑
MKUserLocation
注释。我的意思是,您不能将其从地图批注的数组中删除,因为它是
MKMapView
只读属性

如果您访问
MKMapView.h
class。您将在下面的行中找到

@property (nonatomic, readonly) MKUserLocation *userLocation;
这里我们可以看到这个属性是只读的。因此,我们无法从
MKMapView
annotations数组中删除它。无论您在使用其他注释进行计算时遇到什么困难,都可以在运行时隐藏它

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

例如您的代码:

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

[self.mapView setShowsUserLocation:NO];
NSLog(@"MapView annotations :%@", mapView.annotations);
检查
NSLog
输出,您将看到
MKUserLocation
注释已从
mapView.annotations
数组中删除


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

实际上您无法编辑
MKUserLocation
注释。我的意思是,您不能将其从地图批注的数组中删除,因为它是
MKMapView
只读属性

如果您访问
MKMapView.h
class。您将在下面的行中找到

@property (nonatomic, readonly) MKUserLocation *userLocation;
这里我们可以看到这个属性是只读的。因此,我们无法从
MKMapView
annotations数组中删除它。无论您在使用其他注释进行计算时遇到什么困难,都可以在运行时隐藏它

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

例如您的代码:

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

[self.mapView setShowsUserLocation:NO];
NSLog(@"MapView annotations :%@", mapView.annotations);
检查
NSLog
输出,您将看到
MKUserLocation
注释已从
mapView.annotations
数组中删除

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

在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;
                }

    }
在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;
                }

    }

但是我只想删除用户位置的注释,而不是排除它!但是我只想删除用户位置的注释,而不是排除它!绝对不是解决办法。它删除了我在地图上的位置。如何仅删除我位置上的批注???如何禁用点击蓝点???绝对不是解决方案。它删除了我在地图上的位置。如何仅删除我位置上的批注???如何禁用点击蓝点???