4

有没有简单的方法来隐藏它?我使用用户位置,但我不想显示蓝点。我该如何隐藏它?

- 编辑 -

我用错了吗?

@interface ALMapaViewController : UIViewController <MKMapViewDelegate,
                                                    MKAnnotation>
{
    IBOutlet MKMapView *mapaPrincipal;
    id<ALMapaViewControllerDelegate> delegateMap;
    CLLocationCoordinate2D coordinate; 
}

我的.m

@implementation ALMapaViewController

- (void)viewDidLoad{

    [super viewDidLoad];
    [mapaPrincipal setMapType:MKMapTypeStandard];
    [mapaPrincipal setZoomEnabled:YES];
    [mapaPrincipal setScrollEnabled:YES];

    [mapaPrincipal.userLocation addObserver:self 
                                forKeyPath:@"location" 
                                   options:(NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld) 
                                   context:nil];
    [mapaPrincipal setShowsUserLocation:YES]; 
}


-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {      
    MKCoordinateRegion region;
    region.center = mapaPrincipal.userLocation.coordinate;  
    MKCoordinateSpan span; 
    span.latitudeDelta  = 0.005f; 
    span.longitudeDelta = 0.005f; 
    region.span = span;
    [mapaPrincipal setRegion:region animated:YES];
    self.coordinate = region.center; 
    [mapaPrincipal addAnnotation:self];
    [mapaPrincipal setShowsUserLocation:NO];
}
@end

我已经使用了showUserLocation它,它仍然显示蓝点。

4

5 回答 5

7

您希望接收用户位置更新但不显示蓝点。

一种选择是用于CLLocationManager获取更新而不是地图视图的showsUserLocation. 调用startUpdatingLocation位置管理器并实现其locationManager:didUpdateToLocation:fromLocation:委托方法。

如果您不想使用,另一种选择是通过在地图视图的委托方法中将其属性CLLocationManager设置为来隐藏由地图视图创建的用户位置视图。地图视图将继续接收用户位置更新(因为您没有设置为),但蓝点不会显示,因为您隐藏了它的视图。hiddenYESdidAddAnnotationViewsshowsUserLocationNO

此答案中显示了第二个选项的示例:
Hide MKUserLocation when MKMapView showsUserLocation == YES


不相关的一点是,您不需要使用键值观察来监视对地图视图userLocation属性的更改。请改用mapView:didUpdateUserLocation:委托方法。

于 2012-05-02T13:17:46.303 回答
6

很简单的朋友

[mapView setShowUserLocation:NO];
于 2012-05-02T03:06:45.460 回答
0

这很好用。

- (void)mapView:(MKMapView *)mapView didAddAnnotationViews (NSArray<MKAnnotationView *> *)views {
  MKAnnotationView *ulv = [mapView viewForAnnotation:mapView.userLocation];
  if (ulv) {
    CALayer *layer = [ulv valueForKeyPath:@"_accuracyLayer"];
    if (layer) {
        [layer removeFromSuperlayer];
    }
  }
}
于 2020-07-01T09:03:01.190 回答
0

您可以在 didAddAnnotationViews 委托方法中隐藏用户位置的视图:

(void)mapView:(MKMapView *)mapView didAddAnnotationViews:(NSArray *)views
  { 
    MKAnnotationView *ulv = [mapView viewForAnnotation:mapView.userLocation];
    ulv.hidden = YES;
  }

检查这个https://stackoverflow.com/a/9713085/1344237

于 2016-01-08T15:54:05.360 回答
0

你可以使用这个方法

[mapViewSelf setShowsUserLocation:NO];

于 2017-02-16T10:00:57.830 回答