CLLocation Manager in Swift to get Location of User

后端 未结 13 2068
不知归路
不知归路 2020-11-27 04:48

I am trying to convert an old app in ObjC to Swift as a practice exercise and have ran in to some issues. The way I had it in the old app, it was establishing the CLLocatio

13条回答
  •  小蘑菇
    小蘑菇 (楼主)
    2020-11-27 05:18

    I hope there are two ways.

    var locationManager: CLLocationManager = CLLocationManager()
    var initialLocation :CLLocation?
    var updatedUserLocation :CLLocation?
    
    override func viewDidLoad() {
        super.viewDidLoad() {
    
        //MapView Location
        locationManager.delegate = self
        locationManager.desiredAccuracy = kCLLocationAccuracyNearestTenMeters
        locationManager.requestWhenInUseAuthorization()
        locationManager.startUpdatingLocation()
        locationManager.startUpdatingHeading()
    }
    

    Implementing CLLocationManagerDelegate :

    //CLLocationManager Delegate
    func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
    
        // This only works when user location is updated.
        gpsProviderStatusLabel.changeStatusToOn(gpsProviderStatusLabel)
    
    }
    
    func locationManager(manager: CLLocationManager, didFailWithError error: NSError) {
    
        //Error indicates GPS permission restricted
    
        gpsProviderStatusLabel.changeStatusToOff(gpsProviderStatusLabel)
    
        //Initial Location
        initialLocation = locations.first
    
        //Getting Updated Location
        updatedUserLocation = locations.last
    }
    

    Checking CLLocationDelegate Authorization:

    func locationManager(manager: CLLocationManager, didChangeAuthorizationStatus status: CLAuthorizationStatus) {
    
        //This method does real time status monitoring.
    
            switch status {
            case .NotDetermined:
              print(".NotDetermined")
              break
    
            case .AuthorizedAlways:
              print(".AuthorizedAlways")
              gpsProviderStatusLabel.changeStatusToOn(gpsProviderStatusLabel)
              break
    
    
            case .Denied:
              print(".Denied")
              gpsProviderStatusLabel.changeStatusToOff(gpsProviderStatusLabel)
              break
    
            case .AuthorizedWhenInUse:
              print(".AuthorizedWhenInUse")
              gpsProviderStatusLabel.changeStatusToOn(gpsProviderStatusLabel)
              break
    
            case .Restricted:
              print(".Restricted")
              break
    
            default:
              print("Unhandled authorization status")
              break
    
            }
          }
    

    Note: changeStatusToOn or changeStatusToOff is a UILabel Extenion method which makes the Label text On/Off with Green/Red Colors.

提交回复
热议问题