zoukankan      html  css  js  c++  java
  • CoreLocation基本使用

    #import "CJViewController.h"
    #import <CoreLocation/CoreLocation.h>
    @interface CJViewController ()<CLLocationManagerDelegate>
    @property (nonatomic, strong)CLLocationManager *manager;
    @end
    
    @implementation CJViewController
    // 因为位置管理器在全局中只需一份,所以只需创建一次,使用懒加载
    - (CLLocationManager *)manager
    {
        if (!_manager) {
            // 1.创建位置管理器(用于定位用户的位置)
            _manager = [[CLLocationManager alloc] init];// 创建完位置管理器后,系统默认不会自动定位,因为定位比较耗电,它不会自动开始定位,如果要开始用户定位,要调用startUpdatingLocation方法
            // 设置代理,告诉用户位置
            _manager.delegate = self;
        }
        return _manager;
    }
    
    - (void)viewDidLoad
    {
        [super viewDidLoad];
    
        // 检测定位服务是否可用(可能是程序第一次访问用户位置时,被用户点击了Don‘t Allow导致定位服务不可用)
        if ([CLLocationManager locationServicesEnabled]) { // 如果定位服务能用,开始定位
            [self.manager startUpdatingLocation]; // 通过代理告诉用户的位置
            // 每隔多少米定位一次   kCLDistanceFilterNone,表示用户任何一个移动都会定位一次,如果不想任何一个移动就定位一次,那么就要设定一个值
            self.manager.distanceFilter = kCLDistanceFilterNone;  
            
            // 精准度,越高越耗电
            self.manager.desiredAccuracy = kCLLocationAccuracyHundredMeters; // 代表一百米内是准确的
        }else
        {// 不能定位用户的位置
            // 1.告诉用户检查网络状况
            // 2.提醒用户打开定位开关
        }
        [self countDistance];
    }
    
    // 计算距离
    - (void)countDistance
    {
        CLLocation *location1 = [[CLLocation alloc] initWithLatitude:39.5 longitude:136];
        CLLocation *location2 = [[CLLocation alloc] initWithLatitude:40 longitude:136];
        CLLocationDistance distance = [location1 distanceFromLocation:location2];
        NSLog(@"距离:%f", distance);
        
    }
    
    #pragma mark - CLLocationManagerDelegate
    // 时时监测(定位)用户的位置,调用比较频繁
    - (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations
    {
        // 数组里面的每一个对象都是CLLocation对象,一个CLLocation就代表一个位置
        CLLocation *loc = [locations firstObject];
        NSLog(@"%d", locations.count);
        
        // 停止更新位置,当用户不使用定位服务时,应当马上停止定位(更新), 因为非常耗电
        // [manager stopUpdatingLocation];
    }
    
    @end
  • 相关阅读:
    Google验证码Kaptcha的详细过程
    stm32—单总线(1-wire)
    stm32—I2C
    归并排序(MergeSort)
    冒泡排序(Bubble Sort)
    stm32—GPIO
    stm32—时钟系统
    stm32—复位
    转义字符表
    ASCII码表格
  • 原文地址:https://www.cnblogs.com/Fc-ios/p/3945665.html
Copyright © 2011-2022 走看看