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及更高版本中,此属性可能在启动时包含较新的位置对象。特别是,如果正在运行重要的位置更新,并且您的应用程序被终止,则在重新启动应用程序(并且您创建了新的位置管理器对象)时,此属性将使用最新的位置数据进行更新。此位置数据可能比应用程序处理的上一个位置事件更新。 检查存储在此属性中的位置的时间戳始终是一个好主意。如果接收器当前正在收集位置数据,但最小距离过滤器较大,则返回的位置可能相对较旧。如果是,您可以停止接收器并再次启动它以强制更新