繁体   English   中英

用MKMapView显示当前用户位置?

[英]Show Current User Location with MKMapView?

我试图通过将MKMapView的属性设置为显示用户的当前位置,即setShowsUserLocationYES 默认情况下,当应用程序开始更新用户位置时,iPhone屏幕左上角会出现一个箭头。但是在显示当前位置后,箭头应该消失,但只要应用程序正在运行,它仍然存在,这意味着应用程序仍处于静止状态在后台更新位置? 那我怎么能停止更新当前位置? 我已经实现了立即调用的委托..

如果地图可见且showUserLocation设置为YES,则会在后台继续更新。

当视图消失或应用程序转到后台时,您需要取消设置。 最好的方法可能是注册您的viewController,以获得UIApplicationDidEnterBackgroundNotificationUIApplicationDidBecomeActiveNotification通知。

- (void)viewDidLoad{
  [super viewDidLoad];
  [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(appToBackground) name:UIApplicationDidEnterBackgroundNotification object:nil];
  [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(appReturnsActive) name:UIApplicationDidBecomeActiveNotification object:nil];
} 

然后在此通知调用的方法中,更改有关userLocation的地图视图属性:

- (void)appToBackground{
  [mapview setShowsUserLocation:NO];
}

- (void)appReturnsActive{
  [mapview setShowsUserLocation:YES];
}

通过在那里设置断点并返回主屏幕来检查是否确实调用了这些方法。

我同意Michael Kernahan,我很确定MKMapView存在竞争条件。

MKMapView一旦意识到它失去了对位置服务的访问权限,就会尝试userLocationAnnotation删除userLocationAnnotation (蓝点)。

但是,这似乎没有受到保护,如果开发人员也发出[mapView setShowsUserLocation:NO] ,由于MKMapView的内部线程试图删除userLocationAnnotation和线程之间的竞争,很可能会发生崩溃。调用setShowsUserLocation:NO

您可以通过向位置管理器发送消息来停止更新位置[self.locationManager stopUpdatingLocation];

至于你的情况,你是否试图停止显示用户位置?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM