[英]Show Current User Location with MKMapView?
我试图通过将MKMapView
的属性设置为显示用户的当前位置,即setShowsUserLocation
为YES
。 默认情况下,当应用程序开始更新用户位置时,iPhone屏幕左上角会出现一个箭头。但是在显示当前位置后,箭头应该消失,但只要应用程序正在运行,它仍然存在,这意味着应用程序仍处于静止状态在后台更新位置? 那我怎么能停止更新当前位置? 我已经实现了立即调用的委托..
如果地图可见且showUserLocation设置为YES,则会在后台继续更新。
当视图消失或应用程序转到后台时,您需要取消设置。 最好的方法可能是注册您的viewController,以获得UIApplicationDidEnterBackgroundNotification
和UIApplicationDidBecomeActiveNotification
通知。
- (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.