iO78.0 定位
1.前台定位
1.创建位置管理者 CLLocationManager
并设置代理
lazy var locationM : CLLocationManager = {
let locationM = CLLocationManager()
locationM.delegate = self
return locationM
}()
2.开始定位,调用方法,更新位置信息
locationM.startUpdatingLocation()
3.在CLLocationManagerDelegate
的代理方法中获取用户位置信息
extension ViewController : CLLocationManagerDelegate {
func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
print("每次请求到位置信息,都会调用这个代理方法")
}
}
使用位置管理者进行定位补充:
-
1.如果想要使用位置管理者来开始实现某一个功能 :
开启功能: start
停止这个功能 : stop
2.一旦调用了startUpdatingLocation() 这个方法,就会不断的获取用户的位置信息
-
3.在 iOS6.0之后,如果想要获取用户的隐私(照片,通信),系统会主动弹框让用户授权,
一旦用户选则了don't allow 意味着再也无法获取用户的位置信息.除非用户到设置界面,设置允许你的app来获取当前的位置
4.可以在info.plist文件中, 配置Privacy - Location Usage Description 来说明定位目的
2.后台定位
条件:
- 在前台基础上,勾选后台模式location updates或者直接info.plist文件,添加
Required background modes
(两者实现同一个操作)
操作:
- Capabilities -> Background Models -> 选中Location updates 打钩
- info.plist操作:
添加Required background modes->
App registers for location updates
3. 定位不到, 对应的代理方法不执行
解决:
- 首先,检查运行的模拟器是否是iOS8.0之前的系统版本
- 其次,检查模拟器是否设置位置数据
- 第三,确保代码无问题(一般都是代理没有设置,或者位置管理器对象是局部变量)
- 第四,模拟器BUG, 请将模拟器位置设为None,然后再次设置数据; 或者,重置模拟器