iOS-映射用户位置未居中
我希望地图始终以用户位置为中心,但我希望它始终处于精确的缩放级别。我从中得到的是,如果不放大用户位置,我就无法使用iOS-映射用户位置未居中,ios,swift,mapkit,cllocationmanager,Ios,Swift,Mapkit,Cllocationmanager,我希望地图始终以用户位置为中心,但我希望它始终处于精确的缩放级别。我从中得到的是,如果不放大用户位置,我就无法使用userTrackingMode 因此,我创建了一个变通方法来跟踪用户的位置 func updateRegion(withUserLocation userLocation: CLLocationCoordinate2D) { var region = MKCoordinateRegion.init(center: userLocation, span: MapBod
userTrackingMode
因此,我创建了一个变通方法来跟踪用户的位置
func updateRegion(withUserLocation userLocation: CLLocationCoordinate2D) {
var region = MKCoordinateRegion.init(center: userLocation, span: MapBodyViewConstants.zoomLevel)
// Avoid random spanning on the map by setting the region's span to be the same with the map's span
region.span = mapView.region.span
mapView.setRegion(region, animated: true)
}
问题是,我从CLLocationManager
函数didUpdateLocations
和locationManager(u.manager:CLLocationManager,didUpdateLocations locations:[CLLocation])
manager.location?坐标与locations.last?坐标不同。这是一个小的区别,但仍然有区别(我应该提到,我只有在关闭wifi的情况下才能得到这个区别)
为什么会有差异?我应该使用哪一个?经过一些研究,我得到了位置。最后一个.coordinate
是首选的位置,但我不确定(而且我认为蓝色用户点使用经理的位置,但也不确定这个位置)
还有一个问题:iOS使用什么来获取地图用户的蓝点位置?是locationManager坐标还是什么
我希望问题足够清楚
编辑:我想我也应该提一下。问题不在MKMapViewDelegate
方法mapView(uu.mapView:MKMapView,didUpdate userLocation:MKUserLocation)
。那很好。但在启动应用程序时,我会使用CLLocationManager
中的位置,这就是问题所在,您看到的差异是正常的,因为每个位置的更新方式不同。您应该始终检查位置对象的时间戳,以确保它是最新的。另外,这是关于管理器的Apple文档。位置:
在iOS 4.0及更高版本中,此属性可能在启动时包含较新的位置对象。特别是,如果正在运行重要的位置更新,并且您的应用程序被终止,则在重新启动应用程序(并且您创建了新的位置管理器对象)时,此属性将使用最新的位置数据进行更新。此位置数据可能比应用程序处理的上一个位置事件更新。
检查存储在此属性中的位置的时间戳始终是一个好主意。如果接收器当前正在收集位置数据,但最小距离过滤器较大,则返回的位置可能相对较旧。如果是,您可以停止接收器并再次启动它以强制更新