首页 > 代码库 > CoreLocation基本使用

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

 

CoreLocation基本使用