Я пытаюсь заставить Менеджер местоположений прекратить отслеживать местоположение пользователя, когда пользователь меняет представление, поскольку мне нужно только отображать местоположение пользователя в представлении карт Google только на первой вкладке.
Я пытаюсь включить диспетчер местоположений следующим образом:
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
navigationController?.setNavigationBarHidden(true, animated: animated)
// get location manager if dissapepared
if self.locationManager == nil {
checkLocationServices()
}
}
// check if location services is working
func checkLocationServices(){
if CLLocationManager.locationServicesEnabled(){
// set up
setupLocationService()
checkLocationAuthoization()
}else{
showAlert("Location services not available", "Please enable location services!")
}
}
private func setupLocationService(){
self.locationManager = CLLocationManager() // LocationServices.getLocationManager()
// set delegate to viewcontroller here
self.locationManager.delegate = self
self.locationManager.desiredAccuracy = kCLLocationAccuracyBest
// efficient location usage
self.locationManager.pausesLocationUpdatesAutomatically = true
self.locationManager.activityType = .otherNavigation
// enable background update - crashed application
// locationManager.allowsBackgroundLocationUpdates = true
}
private func checkLocationAuthoization() {
// Request location authorization
self.locationManager.requestAlwaysAuthorization()
switch CLLocationManager.authorizationStatus() {
case .authorizedWhenInUse:
self.locationManager.startUpdatingLocation()
// Do mapp stuff
break
case .denied:
// show alert instructing on how to turn on permissions
showAlert("Activate location", "Please allow Flype applciation to use your location.")
break
case .notDetermined:
self.locationManager.requestAlwaysAuthorization()
break
case .restricted:
break
case .authorizedAlways:
self.locationManager.startUpdatingLocation()
break
default:
break
}
}
// called every time location changed
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
let location = locations.last
customMap.camera = GMSCameraPosition.camera(withLatitude: (location?.coordinate.latitude)!, longitude: (location?.coordinate.longitude)! , zoom: 15.0)
customMap.animate(to: customMap.camera)
self.locationManager.stopUpdatingLocation()
}
И я пытаюсь отключить его следующим образом:
override func viewWillDisappear(_ animated: Bool) {
if self.locationManager != nil {
self.locationManager.stopUpdatingHeading()
self.locationManager = nil
print("SET LOCATION TO NIL!")
}
}