Iphone 是否使用MKMapView显示当前用户位置?
我试图通过设置Iphone 是否使用MKMapView显示当前用户位置?,iphone,ios,mapkit,Iphone,Ios,Mapkit,我试图通过设置MKMapView的属性来显示用户的当前位置,即setShowsUserLocation设置为YES。默认情况下,当应用程序开始更新用户位置时,iPhone屏幕左上角会出现一个箭头。但在显示当前位置后,箭头应该会消失,但只要应用程序正在运行,箭头就仍然存在,这意味着应用程序仍在后台更新位置?那么,如何停止更新当前位置?我已经实现了立即调用的委托。您可以通过向位置经理发送消息来停止更新位置[self.locationManager stopdationlocation] 对于您的情况
MKMapView
的属性来显示用户的当前位置,即setShowsUserLocation
设置为YES
。默认情况下,当应用程序开始更新用户位置时,iPhone屏幕左上角会出现一个箭头。但在显示当前位置后,箭头应该会消失,但只要应用程序正在运行,箭头就仍然存在,这意味着应用程序仍在后台更新位置?那么,如何停止更新当前位置?我已经实现了立即调用的委托。您可以通过向位置经理发送消息来停止更新位置[self.locationManager stopdationlocation]代码>
对于您的情况,您是否尝试停止显示用户位置?如果地图可见并且已将showUserLocation设置为“是”,则它将在后台继续更新
当视图消失或应用程序转到后台时,您需要取消设置此选项。最好的方法可能是注册viewController,以便收到UIApplicationIdentinterBackgroundNotification
和UIApplicationIDBecMeactiveNotification
的通知
- (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];
}
及
通过在此处设置断点并返回主屏幕,检查是否确实调用了这些方法。我同意Michael Kennahan的观点,我非常确定MKMapView
中存在竞争条件
MKMapView
一旦意识到无法访问定位服务,就会试图自行删除userLocationAnnotation
(蓝点)
但是,这似乎不受保护,如果开发人员还发出[mapView setShowsUserLocation:NO]
,很可能会因为MKMapView
的内部线程试图删除userLocationAnnotation
之间的争用而崩溃,而调用setShowsUserLocation:NO
的线程我没有使用任何位置管理器。。如果我停止它,它将隐藏注释(位置)以尝试实现CLLocationManagerDelegate
,您将有更好的方法控制CoreLocation框架。你可以在这里找到一个很好的入门教程:我一直在使用这个方法,但是当进入后台时,我得到了一个看起来像是种族条件崩溃的结果:[MKMapView(UserPositioning)stopUpdatengUserLocation]
调用[MKMapView(UserPositioningInternal)removeUserLocation]
,它用SIGSEGV爆炸。你不认为你已经看到/解决了这个问题吗?需要在viewDidUnload
时删除observer吗?@MichaelKernahan我也遇到了同样的问题。您找到解决方案了吗?@horsejockey-在删除用户位置之前,请尝试将mapView
委托设置为nil
。同意。这在iOS 7.x中似乎确实是一个问题。我想我还没在8.x上看过。
- (void)appReturnsActive{
[mapview setShowsUserLocation:YES];
}