题外话:
很多时候,我们都要以归零的心态,变化的姿态面对每一天。新闻刚刚推送ApplePay 于2.18正式登录中国。今天一早在公司楼下seven-eleven买早餐,刚走到门前,看着门上贴着“Pay”的标示,心想太快了,走到办公室,一打开手机,一看app更新,大部分都以Apple Pay上线为重大更新亮点,如此这样,我该做些什么,像其他人无所事事的一样绑定银行卡?不能吧,我想这个框架在我做的APP中还没有使用,我该如何学一下使用,虽然不难,至少得去看一下。。。要不然又要被鄙视啦。。。你不进步,有人进步。不要在一个地方工作感觉太安逸啦,我们的年龄还不是选择安逸的时候。你不淘汰工作,工作会淘汰你。
回正题:CoreLocation的变化-iOS8
iOS8修改位置设置的内容
即:增加了一套状态(使用应用程序期间中/始终可用),所以以前的CLLcationManage的注册后,
Delegate 代理方法不响应了。
iOS8需要一下设置
- 在info.Plist中追加下面两个字段 (必须有,最少一个,内容是系统ALert的提示语String,提示语可为空)
NSLocationWhenInUseDescription(使用应用程序期间)
NSLocationAlwaysUsageDescription(始终) - 查看一下是否开启定位 服务
if !CLLocationManager.locationServicesEnabled() {
debugPrint("定位服务尚未打开。设置->隐私-> 定位服务")
}
- 创建CLLocationManager对象
locationManager = CLLocationManager()
if CLLocationManager.authorizationStatus() == CLAuthorizationStatus.NotDetermined {//kCLAuthorizationStatusNotDetermined
debugPrint("开始:定位服务还未授权")
locationManager.requestWhenInUseAuthorization()
}
locationManager.delegate = self
//控制定位精度
locationManager.desiredAccuracy = kCLLocationAccuracyBest
//控制定位服务更新频率:每隔多少米定位一次
locationManager.distanceFilter = 1
//启动所有定位硬件
locationManager.startUpdatingLocation()
//关闭stopUpdatingLocation
- 代理方法,用户授权允许应用程序使用位置信息时AuthorizationStatus状态改变
func locationManager(manager: CLLocationManager, didChangeAuthorizationStatus status: CLAuthorizationStatus) {
debugPrint(status.rawValue)
}
- 代理方法,获取位置信息
func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
let geocoder : CLGeocoder = CLGeocoder()
let newLocation : CLLocation = locations.first!
geocoder.reverseGeocodeLocation(newLocation) { (placemarks : [CLPlacemark]?, error: NSError?) -> Void in
for place in placemarks! {
debugPrint("位置信息:\(place.addressDictionary)")
}
}
}
OK完成
注:
当第一次安装App时,调用locationManager.requestWhenInUseAuthorization(),
如果定位未打开,提示如图所示:
定位打开:提示如图