coreLocation位置定位

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 还需要开启后台权限,配置如下图

开启后台权限示意图.png

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);
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 14,433评论 4 61
  • 因为要结局swift3.0中引用snapKit的问题,看到一篇介绍Xcode8,swift3变化的文章,觉得很详细...
    uniapp阅读 10,086评论 0 12
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,990评论 25 709
  • 学习外语,单词肯定是不可避免的 日语更是如此,虽然有很多汉字跟中文一样,但是在意思大相径庭的也不在少数,往往更容易...
    执言偏语阅读 2,490评论 0 3
  • 在各种关系当中,不和谐的互动关系五花八门,没一定的模式。一些是两人之间的,一些是连带关系造成的一圈人之间的。不管哪...
    會稽山人阅读 4,507评论 0 2

友情链接更多精彩内容