美文网首页
coreLocation位置定位

coreLocation位置定位

作者: 陈水寒 | 来源:发表于2017-03-21 10:52 被阅读28次

    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);
    }
    

    相关文章

      网友评论

          本文标题:coreLocation位置定位

          本文链接:https://www.haomeiwen.com/subject/zhiwnttx.html