使用 CLLocationManager 獲取使用者位置
1 - 在專案中包含 CoreLocation.framework; 這可以通過點選:
root directory -> build phases -> Link Binary With Libraries
單擊(+)按鈕,查詢 CoreLocation.framework 並單擊新增。
2-修改 info.plist 檔案,通過將其作為原始碼開啟來請求使用使用者位置的許可權。在標記下新增以下任一鍵:值對,以在應用程式使用時詢問使用者位置的使用情況:
<key>NSLocationWhenInUseUsageDescription</key>
<string>message to display when asking for permission</string>
3-將 CoreLocation 匯入將使用它的 ViewController。
import CoreLocation
4-確保 ViewController 符合 CLLocationManagerDelagate 協議
class ViewController: UIViewController,CLLocationManagerDelegate {}
完成這些步驟後,我們可以建立一個 CLLocationManager 物件作為例項變數,並在 ViewController 中使用它。
var manager:CLLocationManager!
我們這裡不使用’let’,因為我們將修改管理器以指定其委託,更新事件之前的最小距離及其準確性
//initialize the manager
manager = CLLocationManager()
//specify delegate
manager.delegate = self
//set the minimum distance the phone needs to move before an update event is triggered (for example: 100 meters)
manager.distanceFilter = 100
//set Accuracy to any of the following depending on your use case
//let kCLLocationAccuracyBestForNavigation: CLLocationAccuracy
//let kCLLocationAccuracyBest: CLLocationAccuracy
//let kCLLocationAccuracyNearestTenMeters: CLLocationAccuracy
//let kCLLocationAccuracyHundredMeters: CLLocationAccuracy
//let kCLLocationAccuracyKilometer: CLLocationAccuracy
//let kCLLocationAccuracyThreeKilometers: CLLocationAccuracy
manager.desiredAccuracy = kCLLocationAccuracyBest
//ask the user for permission
manager.requestWhenInUseAuthorization()
//Start collecting location information
if #available(iOS 9.0, *) {
manager.requestLocation()
} else {
manager.startUpdatingLocation()
}
現在,為了訪問位置更新,我們可以實現下面的函式,該函式稱為超時,達到 distanceFilter。
func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {}
locations 引數是一個 CLLocation 物件陣列,表示裝置的實際位置。通過這些物件,可以訪問以下屬性:coordinate,altitude, floor, horizontalAccuracy, verticalAccuracy, timestamp, description, course, speed
和測量兩個位置之間距離的函式 distance(from:)
。
注意:在請求位置許可時,有兩種不同型別的授權。
正在使用時授權僅授予應用程式在應用程式正在使用或前臺時接收你的位置的許可權。
始終授權,提供應用後臺許可權,如果你的應用關閉,可能會導致電池續航時間縮短。
應根據需要調整 Plist 檔案。