当我重新启动我的应用程序或在很长一段时间后恢复时,MKMapView 用户位置的概念是错误的,并显示我在海中央。
我正在使用以下代码:
self.mapView.centerCoordinate = self.mapView.userLocation.location.coordinate;
[mapView setCenterCoordinate:self.mapView.userLocation.location.coordinate zoomLevel:ZOOM_LEVEL animated:YES];
发生在应用程序漫长的恢复或全新的开始之后......
这是预期的行为:iPhone 并不总是使用 GPS 跟踪用户位置(这会消耗大量电池)。因此,一旦地图显示出来,MKMapView
实例显示它所知道的最后一个“最佳”用户位置,然后通过激活跟踪来提高准确性(这是一个无缝过程,您不必关心它)。
您可以监控何时MKMapView
通过实施更新用户在地图上的位置MKMapViewDelegate
协议。只需实施:
- (void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation {
CLLocationAccuracy accuracy = userLocation.location.horizontalAccuracy;
if (accuracy ......) {
}
}
(更多信息来自苹果文档here )
我的示例中的上面的代码检查地图视图当前显示的位置的准确性并做出相应的反应。
[EDIT]
如果一开始在海中央显示用户位置确实让您感到困扰,您可以隐藏用户位置,直到获得足够准确/新鲜的位置。
为此,请设置showsUserLocation
的财产MKMapView
to NO
首先直到您获得足够准确的位置(感谢之前的委托回调),然后将其设置为YES
.
通过这样做,您将避免显示不准确或太旧而无法显示的位置(有一个timestamp
财产在CLLocation
检查它是否是旧位置)
注意:你don't必须创建一个CLLocationManager
在您这边的实例中,MKMapView 在内部创建一个并发布通过此委托选择器接收的位置。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)