zoukankan      html  css  js  c++  java
  • 定位

    1. 导入框架 <CoreLocation.framework>, 引入头文件 import <CoreLocation/CoreLocation.h>;

    2. 创建管理者对象 (strong)

    #import "ViewController.h"

    @interface ViewController ()<CLLocationManagerDelegate>

     /**  定位管理者 ***/

    @property (nonatomic, strong) CLLocationManager *mgr;

    @end

    @implementation ViewController 

     /**  懒加载 ***/

    - (CLLocationManager *)mgr{

        if (!_mgr) {

            _mgr = [[CLLocationManager alloc] init];

        }

        return _mgr;

    }

     - (void)viewDidLoad {

        [super viewDidLoad];

        // 1. 创建CoreLocation管理者

        

        // 2. 成为CoreLocaltion管理者的代理, 监听获取的位置

        self.mgr.delegate = self;

        

        // 3. 设置属性

        // 设置多久 获取一次位置

    //    self.mgr.distanceFilter = 500;

        

        /**

           kCLLocationAccuracyBestForNavigation -- 最佳导航

           kCLLocationAccuracyBest;             -- 最精准

           kCLLocationAccuracyNearestTenMeters; -- 十米

           kCLLocationAccuracyHundredMeters;    -- 百米

           kCLLocationAccuracyKilometer;        -- 千米

           kCLLocationAccuracyThreeKilometers;  -- 三千米

         */

        // 设置定位精确度

        self.mgr.desiredAccuracy = kCLLocationAccuracyBestForNavigation;

        

        /**

         *  ios7 , 只要开始定位, 系统就会自动要求用户对你的应用程序授权. 但是从ios8开始, 想要定位自己必须主动要求用户授权,而且必须再info.plist文件中配置一项属性, 才能弹出授权窗口.

             NSLocationWhenInUseDescription,允许在前台获取GPS的描述

             NSLocationAlwaysUsageDescription,允许在后台获取GPS的描述

         */

        

        

        // 4. 请求授权定位

        if(IOS8){

            LogRed(@"ios 8");

            

            // 主动要求用户授权, 授权成功以后会调用对应的代理方法.

            [self.mgr requestAlwaysAuthorization]; // 请求前台和后台定位权限

    //        [self.mgr requestWhenInUseAuthorization]; // 请求前台定位权限

            

            

        }else{

            LogMagenta(@"ios 7");

            

            // 3. 开始监听

            [self.mgr startUpdatingLocation];

        }

    }

    /**

     *  当授权状态改变时, 调用此方法

     *

     *  @param manager 触发事件的对象

     *  @param status  授权状态

     */

    - (void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status

    {

    //

    //    kCLAuthorizationStatusNotDetermined   ---- 等待授权

    //    kCLAuthorizationStatusRestricted,     ---- 受限 -- 未授权

    //    kCLAuthorizationStatusDenied          ---- 拒绝授权

    //    kCLAuthorizationStatusAuthorizedAlways --- 前台 后台都授权

    //    kCLAuthorizationStatusAuthorizedWhenInUse - 前台授权

        

        if (status == kCLAuthorizationStatusNotDetermined) {

            LogWhite(@"等待用户授权");

        }else if (status == kCLAuthorizationStatusAuthorizedAlways ||

                  status == kCLAuthorizationStatusAuthorizedWhenInUse)

        {

            LogRed(@"授权成功");

            // 开始定位

            [self.mgr startUpdatingLocation];

            

        }else

        {

            LogGreen(@"授权失败");

        }

    }

    #pragma mark - CLLocationManagerDelegate

    /**

     *  获取到位置信息后就会调用

     *

     *  @param manager   触发事件的对象

     *  @param locations 获取到的位置

     */

    - (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations

    {

        

    /**

         *  // CLLocation

         location.coordinate; 坐标, 包含经纬度

         location.altitude; 设备海拔高度 单位是米

         location.course; 设置前进方向 0表示北 90东 180南 270西

         location.horizontalAccuracy; 水平精准度

         location.verticalAccuracy; 垂直精准度

         location.timestamp; 定位信息返回的时间

         location.speed; 设备移动速度 单位是米/秒, 适用于行车速度而不太适用于不行

         */

        

        LogRed(@"%@",locations);

        // 1. 获取最后一次定位的位置信息

        CLLocation *location = [locations lastObject];

        

        LogYellow(@"%f --- %f ---%f",location.coordinate.latitude,location.coordinate.longitude,location.speed);

        

    //    [self.mgr stopUpdatingLocation];

    }

  • 相关阅读:
    使用QT在子线程中访问串口
    小程序批量上传图片方案
    Jenkins自动化远程部署(vue-github)
    nginx配置https证书
    Linux 安装php7
    Vue技术点整理-指令
    如何保证接口的幂等性?
    mybatis 一对多分页查询数据条数不匹配解决
    源码系列-JDK-String
    kafka window 操作
  • 原文地址:https://www.cnblogs.com/guangleijia/p/4825755.html
Copyright © 2011-2022 走看看