2017-02-15 2 views
2

Im Erstellen dieser App, und es muss den Benutzer Standort - alles funktioniert ordnungsgemäß, die Sache ist, dass die Zeit von der Annahme der Verwendung von Standortdiensten, um den tatsächlichen Standort zu nehmen dauert wie 5 Sekunden - ist das normal? ich verwendet habe, andere Anwendungen, wo es viel schneller geht ..CLLocationManager ist langsam bekommen Ort, Swift

Hier ist, was mein Code wie folgt aussieht:

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") 
} 

Aber die Zeit von der Anwendung wird die Lage in den centerMapOnLocation-Funktion zu setzen, scheint nur ziemlich lang zu sein. Was ist zu erwarten, wenn ein Nutzerstandort ermittelt wird? Ich teste auf einer WiFi-Verbindung, so dass ich es nicht kenne, weil das Internet langsam ist, oder es ist eine schlechte Verbindung ...

Wer hat eine Idee? :)

Mit freundlichen Grüßen!

+0

versuchen Sie, die Genauigkeit einzustellen und locationManager.startUpdatingLocation() zu verwenden. Ich mache das und bekomme Antwort innerhalb einer Sekunde (auf dem Gerät). –

+0

Super! locationManager.startUpdatingLocation() hat es geschafft! Ich habe es mit .requestLocation() getauscht, und jetzt funktioniert es wie ein Zauber! Danke @JensPeter - möchte dir die richtige Antwort geben, aber ich kann es nicht als Kommentar:/schreibe eine Antwort, und ich werde es akzeptieren :) –

Antwort

2

Versuchen Sie, die Genauigkeit einzustellen und locationManager.startUpdatingLocation() zu verwenden. Ich mache das und bekomme Antwort innerhalb einer Sekunde (auf dem Gerät).

1

Aus der Dokumentation von requestLocation():

Diese Methode kehrt sofort zurück. Das Aufrufen bewirkt, dass der Standortmanager eine Standortkorrektur (die einige Sekunden dauern kann) erhält und die Methode locationManager (_: didUpdateLocations :) des Stellvertreters mit dem Ergebnis aufruft.

Source

Also im Grunde ist alles, was mit Ihrem Code in Ordnung, es ist nur, wie das Framework integriert ist.

+0

Meiner Erfahrung nach ist requestLocation() wesentlich langsamer (2x-3x) Rückgabe eines Ergebnisses im Vergleich zu startUpdatingLocation() –

Verwandte Themen