2017-02-15 19 views
2

Я создаю это приложение, и ему нужно получить местоположение пользователя - его все работает правильно, дело в том, что время от принятия использования служб определения местоположения до получения фактического местоположения как 5 секунд - это нормально? я использовал другие приложения, где он идет гораздо быстрее ..CLLocationManager медленное получение местоположения, Swift

Вот что мой код выглядит следующим образом:

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-функции, кажется, довольно долго. Что можно ожидать, когда вы получаете местоположение пользователя? Я тестирую Wi-Fi соединение, поэтому я знаю его не потому, что интернет медленный, либо его плохое соединение ...

У кого-нибудь есть идея? :)

С уважением!

+0

попробуйте установить точность и использовать locationManager.startUpdatingLocation(). Я делаю это и получаю ответ в течение секунды (на устройстве). –

+0

Удивительный! locationManager.startUpdatingLocation() сделал трюк! Я поменял его на .requestLocation(), и теперь он работает как шарм! Спасибо @JensPeter - хотел бы дать вам правильный ответ, но я не могу назвать его комментарий:/напишите ответ, и я приму его :) –

ответ

2

Попробуйте установить точность и использовать locationManager.startUpdatingLocation(). Я делаю это и получаю ответ в течение секунды (на устройстве).

1

Из документации requestLocation():

Этот метод немедленно возвращает. Вызов вызывает диспетчер местоположений для получения исправления местоположения (это может занять несколько секунд) и вызвать метод locationManager (_: didUpdateLocations :) с результатом.

Source

Так в основном, все в порядке с вашим кодом, это просто, как строится структура.

+0

По моему опыту requestLocation() значительно медленнее (2x-3x) для возврата результата по сравнению с startUpdatingLocation() –