MKMapView的用户位置在启动或恢复时出错

DeS*_*ell 9 iphone mkmapview userlocation game-center

当我开始我的应用程序新鲜,或在很长一段时间后恢复,MKMapView的userLocation的概念是错误的,并显示我在海中.

我使用以下代码:

self.mapView.centerCoordinate = self.mapView.userLocation.location.coordinate;
[mapView setCenterCoordinate:self.mapView.userLocation.location.coordinate zoomLevel:ZOOM_LEVEL animated:YES];
Run Code Online (Sandbox Code Playgroud)

经过漫长的应用程序简历或全新的开始......

yon*_*nel 21

这是预期的行为:iPhone使用GPS并不总是跟踪用户位置(它将耗费大量电池).因此,只要显示地图,__CODE__实例就会显示它知道的最后一个"最佳"用户位置,然后通过激活跟踪来提高准确性(这是一个无缝过程,您不必关心它).

您可以__CODE__通过实施__CODE__协议监视何时更新地图上的用户位置.刚实施:

- (void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation      {
    CLLocationAccuracy accuracy = userLocation.location.horizontalAccuracy;
    if (accuracy ......) {
    } 
}
Run Code Online (Sandbox Code Playgroud)

(来自苹果文档更多信息点击这里)

我的示例中的上述代码检查mapView当前显示的位置的准确性,并做出相应的反应.

[编辑]
如果首先在海中间显示用户位置真的打扰你,你可以隐藏用户位置,直到你得到一个准确/新鲜的位置.
为此,首先设置to 的__CODE__属性,直到获得足够准确的位置(感谢前一个委托回调),然后将其设置为. 通过这样做,您将避免显示一个不准确或太旧的位置无法显示(有一个属性,以检查是否旧的位置)__CODE____CODE____CODE__
__CODE____CODE__

注意:您不必__CODE__在您身边创建实例,MKMapView在内部创建一个实例并发布通过此委托选择器接收的位置.

  • +1你是第一个在这个问题的海洋中部解决观看的人. (2认同)

Jer*_*sel 1

不幸的是,这是 GPS 芯片的功能。它并不总是处于开启状态,因此在最初的几分钟内数据通常会是错误的。您最好的选择可能是将应用程序记录的最后位置存储在 NSUserDefaults 中,然后等待精度达到您想要的位置,然后再切换到实时数据,或者隐藏 MkMapView 直到精度达到您想要的位置是,然后在此时显示它(您可以在此期间显示加载屏幕)