用MKMapView显示当前用户位置?

hem*_*ant 7 iphone mapkit ios

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

Cyr*_*roy 16

如果地图可见且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];
} 
Run Code Online (Sandbox Code Playgroud)

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

- (void)appToBackground{
  [mapview setShowsUserLocation:NO];
}
Run Code Online (Sandbox Code Playgroud)

- (void)appReturnsActive{
  [mapview setShowsUserLocation:YES];
}
Run Code Online (Sandbox Code Playgroud)

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

  • 我一直在使用这种方法,但是当进入后台时,我看到了一个似乎是竞争条件崩溃的事件:`[MKMapView(UserPositioning)stopUpdatingUserLocation]`调用`[MKMapView(UserPositioningInternal)removeUserLocation]`用一个SIGSEGV炸毁.不要以为你已经看过/已经解决了这个问题? (2认同)