用途 : 地理定位,地理编码与反编码(将经纬度与地理位置的相互转化),区域监测(在用户出现在区域范围内的时候调用监听方法)
使用前置 : 导入<CoreLocation/CoreLocation.h>头文件
重要属性:CLLocationManager(用于用户定位)->不是单例
iOS8.0之前版本:
1. 创建对象:CLLocationManager *manager = [[CLLocationManager alloc] init];
需要考虑到设置的位置,生命周期,因为其不是单例
2. 设置代理 :manager.delegate = self;
3. 开始位置定位 :[manager startUpdatingLocation];
4. 遵循协议并实现协议方法:(didUpdateLocation方法(参数:manager(管理者对象),location(位置数组)));
5. 设置位置过滤(放置在位置不变的时候频繁定位) manager.distanceFilter = 100m;(每隔一百米距离定位一次)
并设置定位精确度:manager.distanceAccurary = (double类型的常量字符串);
6. 在plist文件中设置申请用户访问位置功能的提示信息->只使用8.0之前版本:
(Information Property List -> Privacy-Location Usage Description string类型的值)
7. 使用[manager stopUpdatingLocation];关闭定位
8. 后台定位target下的capability下的backgroundMode中的locationUpdate。
iOS8.0+
不同:
1. 需要主动调用API来申请使用定位的授权)(前提是配置plist.info NSLocationWhenInUseUsage.. String):
[manager requestAlwaysAuthorization]//前后台都可以定位
[manager requestWhinInUseAuthorization]//默认情况下不允许后台定位,若使用后台模式设置可以,但是会在进入后台切使用该模式时候报通知条
适配
1. 使用if判断硬件系统编号的形式([if([UIDevice currentDevice].sustemVersion.floatValue >= 8.0)]{} else {})
2. 使用运行时机制根据是否响应方法替换
if([_manager respondsToSelector:@selector(requestAlwaysAuthorization)]){
[manager requestAlwaysAuthorization];
//能执行则执行
}