很多的APP中都会用到用户的当前位置信息,本文将实现这个小功能
import UIKit import 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方法进行请求。