標籤:
很多的APP中都會用到使用者的當前位置資訊,本文將實現這個小功能
import UIKitimport CoreLocation //添加引用class ViewController: UIViewController,CLLocationManagerDelegate { let locationManager:CLLocationManager = CLLocationManager() //執行個體化一個CLLocationManager對象 override func viewDidLoad() { super.viewDidLoad() locationManager.delegate = self locationManager.desiredAccuracy = kCLLocationAccuracyBest //設定為最高的精度 if(ios8()){ locationManager.requestAlwaysAuthorization() //如果是IOS8及以上版本需調用這個方法 } locationManager.startUpdatingLocation() //start updating location } func ios8() -> Bool { var versionCode:String = UIDevice.currentDevice().systemVersion let start:String.Index = advance(versionCode.startIndex, 0) let end:String.Index = advance(versionCode.startIndex, 1) let range = Range<String.Index>(start: start, end: end) let version = NSString(string: UIDevice.currentDevice().systemVersion.substringWithRange(range)).doubleValue return version >= 8.0 } //重寫這個方法擷取位置 func locationManager(manager: CLLocationManager!, didUpdateLocations locations: [AnyObject]!){ let location:CLLocation = locations[locations.count - 1] as! CLLocation //得到數組中的最後一個元素 if location.horizontalAccuracy > 0 { let latitude = location.coordinate.latitude //得到經偉度 let longtitude = location.coordinate.longitude locationManager.stopUpdatingLocation() //stop updating location } } //重寫當發生錯誤時要調用的方法 func locationManager(manager: CLLocationManager!, didFailWithError error: NSError!){ println(error) } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. }}
寫要上面的代碼還需要在info.plist檔案內添加以下幾個索引值:
請求獲得應用一直使用定位服務授權:NSLocationAlwaysUsageDescription:“Please allow me to get you location”
在使用者第一交使用APP時也會詢問是否允許APP擷取目前使用者的地理位置資訊
請求獲得應用使用時的定位服務授權:Location Usage Description:“我們需要使用你的地理位置儲備“
iOS 8 還提供了更加人性化的定位服務選項。App 的定位服務不再僅僅是關閉或開啟,現在,定位服務的啟用提供了三個選項,「永不」「使用應用程式期間」和「始終」。同時,考慮到能耗問題,如果一款 App 要求始終能在後台開啟定位服務,iOS 8 不僅會在首次開啟 App 時主動向你詢問,還會在日常使用中彈窗提醒你該 App 一直在後台使用定位服務,並詢問你是否繼續允許。在iOS7及以前的版本,如果在應用程式中使用定位服務只要在程式中調用startUpdatingLocation方法應用就會詢問使用者是否允許此應用是否允許使用定位服務,同時在提示過程中可以通過在info.plist中配置通過配置Privacy - Location Usage Description告訴使用者使用的目的,同時這個配置是可選的。
但是在iOS8中配置配置項發生了變化,可以通過配置NSLocationAlwaysUsageDescription或者NSLocationWhenInUseUsageDescription來告訴使用者使用定位服務的目的,並且注意這個配置是必須的,如果不進行配置則預設情況下應用無法使用定位服務,開啟應用不會給出開啟定位服務的提示,除非安裝後自己設定此應用的定位服務。同時,在應用程式中需要根據配置對requestAlwaysAuthorization或locationServicesEnabled方法進行請求。
SWIFT中擷取當前經偉度