iOS 定位

kim_jin發表於2017-12-26

iOS 8以後使用Core Location進行定位

  1. iOS 8以後再使用Core Location前需要呼叫下面兩個方法其中之一

    • 始終允許訪問位置資訊 requestAlwaysAuthorization()
    • 使用應用程式期間允許訪問位置資料 requestWhenInUseAuthorization()
  2. 在Info.plist中新增兩個String型別的NSLocationAlwaysUsageDescription和NSLocationWhenInUseUsageDescription

CLLocationManager

let manager = CLLocationManager()
// 始終訪問位置資訊
manager.requestAlwaysAuthorization()
// 在App使用期間訪問位置資訊
// manager.requestWhenInUseAuthorization()
manager.delegate = self

manager.distanceFilter = 10.0 // 最少移動多少距離才更新一次
manager.desiredAccuracy = kCLLocationAccuracyKilometer // 定位精度

manager.startUpdatingLocation() // 開始定位
複製程式碼

獲取位置資訊

獲取位置資訊通過CLLocationManagerDelegate的協議方法來進行更新,一般會使用locationManager(manager:didUpdateLocations:)

func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
    if let currentLocation: CLLocation = locations.last {
      print("Current latitude: \(currentLocation.coordinate.latitude), longitude:\(currentLocation.coordinate.longitude)")

      // 解碼出相關資訊
      let clGeocoder = CLGeocoder()
      clGeocoder.reverseGeocodeLocation(currentLocation, completionHandler: { (placemarks, error) in
        if let mark = placemarks?.first {
          if let dic = mark.addressDictionary {
            let city = dic["City"] as? String
            let state = dic["State"] as? String
            self.locationLabel.text = state! + city!
          }
        }
      })
    }
    manager.stopUpdatingLocation()
  }
複製程式碼

相關文章