func startLocationManager() {
if CLLocationManager.locationServicesEnabled() {
locationManager.delegate = self
locationManager.desiredAccuracy = kCLLocationAccuracyHundredMeters
locationManager.startUpdatingLocation()
}
}
После получения авторизации местоположения я вызвал этот метод в viewDidLoad()
, а затем начинает вызываться func locationManager(_:, didUpdateLocations:)
.
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
let lastLocation = locations.last!
if lastLocation.timestamp.timeIntervalSinceNow < -5 {
return
}
if lastLocation.horizontalAccuracy < 0 {
return
}
var distance = CLLocationDistance(Double.greatestFiniteMagnitude)
if let location = location {
distance = lastLocation.distance(from: location)
}
if location == nil || location!.horizontalAccuracy > lastLocation.horizontalAccuracy {
location = lastLocation
if location.horizontalAccuracy <= locationManager.desiredAccuracy {
stopLocationManager()
getWeather()
}
} else if location == nil || distance < 1 {
let timeInterval = lastLocation.timestamp.timeIntervalSince(location!.timestamp)
if timeInterval > 5 {
stopLocationManager()
getWeather()
}
}
}
И вот как я заканчиваю updateLocation:
func stopLocationManager() {
locationManager.stopUpdatingLocation()
locationManager.delegate = nil
}
Наконец, я получил данные о местоположении, которые я хотел отлично.
Но когда я хочу повторно получить новое местоположение другими способами, то есть оно выполнило locationManager.startUpdatingLocation()
, ивсе еще не может выполнить func locationManager(_:, didUpdateLocations:)
.
Я хочу знать, как это исправить.