我正在创建这个应用程序,它需要获得用户的位置-它的所有工作正常,问题是,从接受使用位置服务的时间,以获得实际的位置需要5秒-这是正常的吗?我用过其他应用程序,在那里它走得更快。
下面是我的代码:
override func viewDidLoad() {
super.viewDidLoad()
// Ask for Location-Authorisation from the User.
self.locationManager.requestWhenInUseAuthorization()
if CLLocationManager.locationServicesEnabled() {
locationManager.delegate = self
locationManager.requestLocation()
}
mapView.delegate = self
}
func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
let locValue: CLLocationCoordinate2D = manager.location!.coordinate
let initialLocation = CLLocation(latitude: locValue.latitude, longitude: locValue.longitude)
self.centerMapOnLocation(initialLocation)
}
func locationManager(manager: CLLocationManager, didFailWithError error: NSError) {
print("could not get location")
}
但是从应用程序获取位置到centerMapOnLocation-function的时间似乎很长。当获取用户位置时,应该预期什么?我正在测试wifi连接,所以我知道这不是因为互联网很慢,或者连接不好...
有人有主意吗?:)
最好的问候!
4条答案
按热度按时间mrphzbgm1#
尝试设置准确性并使用locationManager.startUpdatingLocation()。我这样做了,并在一秒钟内得到答案(在设备上)。
bnl4lu3b2#
来自**requestLocation()的文档:
此方法立即返回。调用它会导致位置管理器获取位置修复(可能需要几秒钟)**并使用结果调用委托的locationManager(_:didUpdateLocations:)方法。
Source
所以基本上,你的代码一切都很好,只是框架是如何构建的。
vsikbqxv3#
初始化位置管理器时,添加startUpdatingLocation():
如果没有**startUpdatingLocation(),**geo-location大约需要5秒,如果有,请求几乎立即执行。
wi3ka0sx4#
如果您不想因位置管理器而延迟应用的启动,请考虑部署两个位置管理器(在应用代理中),一个负责快速生成位置,另一个负责准确生成位置:
3 km
精度与startUpdatingLocation()
的组合应该几乎立即返回位置,几乎总是在根视图控制器准备就绪之前返回。bestLoc
管理器很可能在用户启动应用后很久才返回位置,但它会非常准确。