CLLocationManager.requestLocation()
需要大约10秒才能触发didUpdateLocations
事件。
以下是为CLLocationManager
let locationManager = CLLocationManager()
locationManager.delegate = self
locationManager.desiredAccuracy = kCLLocationAccuracyBest
locationManager.distanceFilter = 10
locationManager.requestWhenInUseAuthorization()
locationManager.requestLocation()
根据documentation,这可能需要几秒钟。
此方法立即返回。调用它会导致位置管理器获取位置修复(可能需要几秒钟)并使用结果调用委托的locationManager(_:didUpdateLocations :)方法。
但这需要10秒钟吗?或者我错过了什么?
答案 0 :(得分:7)
如果你关掉
locationManager.requestLocation()
代表
locationManager.startUpdatingLocation()
然后didUpdateLocations
将立即开始射击。这应该可以解决您的问题。
答案 1 :(得分:2)
TL; DR
requestLocation()是Apple提供的一种便捷方法,它可以在后台运行 startUpdatingLocation(),检索多个位置数据,并选择最准确的数据进行传递进行委托,并调用 stopUpdatingLocation()
如果无法确定哪个位置数据最好,则此过程最多可能需要10秒钟(大约是超时限制)。
答案 2 :(得分:0)
我认为您有错误的前提。 Google总是更快。我猜测您的构建应用程序从头开始,并且该应用程序无法访问缓存。否则,GoogleMaps有时还会花费3秒钟以上的时间。显然,我不知道确切的细节,但我只是想,当您使用GoogleMaps时,您是以用户的身份使用它,而现在当您在开发自己的应用程序时,您正在考虑将其作为开发人员,即对此一丝不苟。
还要最好地进行比较,请确保将desiredAccuracy
设置为BestForNavigation
,将distanceFilter
设置为0
,将activityType
设置为.automotive
。这通常是导航应用程序正在做的事情。
Leo的评论也很重要:请确保您从主队列中更新了用户界面
并且正如两位经验丰富的Core-Location用户所提到的:programmer和Paulw11:
在位置管理器上致电startUpdatingLocation
时,必须给它时间来获得职位。您不应该立即致电stopUpdatingLocation
。我们让它最多运行10秒钟,或者直到获得未缓存的高精度位置为止。
答案 3 :(得分:-2)
我将.desiredAccuracy
更改为kCLLocationAccuracyKilometer
,而我的.requestLocation()
现在立即返回了职位