1、 iOS 7、iOS 8、iOS 9定位都不一样,如果要兼容老版本需要做不同的适配
初始化代码如下:
CLLocationManager lM = [[CLLocationManager alloc] init];
// 设置定位精确度
lM.desiredAccuracy = kCLLocationAccuracyBest;
lM.delegate = self;
// ios8 适配
if ([[UIDevice currentDevice].systemVersion floatValue] >= 8.0) {
[lM requestAlwaysAuthorization];
}
if ([[UIDevice currentDevice].systemVersion floatValue] >= 9.0) {
// 需要开启后台权限
lM.allowsBackgroundLocationUpdates = YES;
}
适配ios8 还需要在info.plist文件中添加以下键值:NSLocationAlwaysUsageDescription
适配ios9 还需要开启后台权限,配置如下图
2、指南针
初始化代码如下:
CLLocationManager lM = [[CLLocationManager alloc] init];
lM.delegate = self;
[lM startUpdatingHeading];
// 代理方法
- (void)locationManager:(CLLocationManager *)manager didUpdateHeading:(CLHeading *)newHeading
{
/**
* CLHeading
* magneticHeading : 磁北角度
* trueHeading : 真北角度
*/
CGFloat angle = newHeading.magneticHeading;
// 角度转弧度
CGFloat radian = angle / 180 * M_PI;
[UIView animateWithDuration:0.25 animations:^{
self.compassImageView.transform = CGAffineTransformMakeRotation(radian);
}];
}
3、区域监控
给出一个中心点和半径为监控区域,当进入或者离开该区域时,通过代理通知控制器
初始化代码及代理如下
// 定位管理者
CLLocationManager lM = [[CLLocationManager alloc] init];
lM.delegate = self;
// 给出一个中心位置
CLLocationCoordinate2D center = {40.905206,116.390356};
// 设置监控区域的中心位置、监控区域以及标识
CLCircularRegion *region = [[CLCircularRegion alloc] initWithCenter:center radius:1000 identifier:@"区域监听"];
// 开启区域监听
[lM startMonitoringForRegion:region];
// 第一次进入区域监听的时候不会调用代理方法
// locationManager:(CLLocationManager *)manager didEnterRegion和
// locationManager:(CLLocationManager *)manager didExitRegion,
// 所以需要第一次进入的时候需要判断下当前的区域状态
[self.lM requestStateForRegion:region];
// 代理方法
- (void)locationManager:(CLLocationManager *)manager didEnterRegion:(CLRegion *)region
{
NSLog(@"进入了监控区域");
}
- (void)locationManager:(CLLocationManager *)manager didExitRegion:(nonnull CLRegion *)region
{
NSLog(@"离开了监控区域");
}
- (void)locationManager:(CLLocationManager *)manager didDetermineState:(CLRegionState)state forRegion:(CLRegion *)region
{
// 当前所在区域状态
NSLog(@"%zd",state);
}
网友评论