Core Location (用于地理定位)和MapKit系列2

- (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. // 1.创建CoreLocation管理者 // CLLocationManager *mgr = [[CLLocationManager alloc] init]; // 2.成为CoreLocation管理者的代理监听获取到的位置 self.mgr.delegate = self; // 设置多久获取一次 // self.mgr.distanceFilter = 500; // 设置获取位置的精确度 /* kCLLocationAccuracyBestForNavigation 最佳导航 kCLLocationAccuracyBest; 最精准 kCLLocationAccuracyNearestTenMeters; 10米 kCLLocationAccuracyHundredMeters; 百米 kCLLocationAccuracyKilometer; 千米 kCLLocationAccuracyThreeKilometers; 3千米 */ // self.mgr.desiredAccuracy = kCLLocationAccuracyNearestTenMeters; /* 注意: iOS7只要开始定位, 系统就会自动要求用户对你的应用程序授权. 但是从iOS8开始, 想要定位必须先"自己""主动"要求用户授权 在iOS8中不仅仅要主动请求授权, 而且必须再info.plist文件中配置一项属性才能弹出授权窗口 NSLocationWhenInUseDescription,允许在前台获取GPS的描述 NSLocationAlwaysUsageDescription,允许在后台获取GPS的描述 */ // 判断是否是iOS8 if([[UIDevice currentDevice].systemVersion doubleValue] >= 8.0) { NSLog(@"是iOS8"); // 主动要求用户对我们的程序授权, 授权状态改变就会通知代理 // [self.mgr requestAlwaysAuthorization]; // 请求前台和后台定位权限 // [self.mgr requestWhenInUseAuthorization];// 请求前台定位权限 }else { NSLog(@"是iOS7"); // 3.开始监听(开始获取位置) [self.mgr startUpdatingLocation]; } }

/**
* 授权状态发生改变时调用
*
* @param manager 触发事件的对象
* @param status 当前授权的状态
*/
-(void)locationManager:(CLLocationManager *````)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status
{
/*
用户从未选择过权限
kCLAuthorizationStatusNotDetermined
无法使用定位服务,该状态用户无法改变
kCLAuthorizationStatusRestricted
用户拒绝该应用使用定位服务,或是定位服务总开关处于关闭状态
kCLAuthorizationStatusDenied
已经授权(废弃)
kCLAuthorizationStatusAuthorized
用户允许该程序无论何时都可以使用地理信息
kCLAuthorizationStatusAuthorizedAlways
用户同意程序在可见时使用地理位置
kCLAuthorizationStatusAuthorizedWhenInUse
*/

if (status == kCLAuthorizationStatusNotDetermined) { NSLog(@"等待用户授权"); }else if (status == kCLAuthorizationStatusAuthorizedAlways || status == kCLAuthorizationStatusAuthorizedWhenInUse) { NSLog(@"授权成功"); // 开始定位 [self.mgr startUpdatingLocation]; }else { NSLog(@"授权失败"); } }

#pragma mark - CLLocationManagerDelegate
//-(void)locationManager:(CLLocationManager *````)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
/**
* 获取到位置信息之后就会调用(调用频率非常高)
*
* @param manager 触发事件的对象
* @param locations 获取到的位置
*/
-(void)locationManager:(CLLocationManager *````)manager didUpdateLocations:(NSArray *)locations
{ NSLog(@"%s", __func__); // 如果只需要获取一次, 可以获取到位置之后就停止 // [self.mgr stopUpdatingLocation]; }

#pragma mark - 懒加载
- (CLLocationManager *)mgr { if (!_mgr) { _mgr = [[CLLocationManager alloc] init]; } return _mgr; }

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一. iOS8.0之前的定位(✨✨✨✨✨) 1. 前台定位 导入CoreLocation框架以及对应的主头文件 #...
    走道牙的人阅读 247评论 0 0
  • 简介: 在移动互联网时代,移动app能解决用户的很多生活琐事,比如周边:找餐馆、找KTV、找电影院等等 导航:根据...
    冰镜止水阅读 1,373评论 0 4
  • 片头曲 CoreLocation框架 来自520it.com 一. iOS8.0之前的定位(✨✨✨✨✨) 1. 前...
    人生路02阅读 352评论 0 1
  • 林夕的文章就是这样丰富 两张纸 就描绘出一种现状 中国式的是非黑白 没那么容易就能够分辨 小时候童言无忌 认为看...
    劳斯kat阅读 220评论 0 0
  • 人间四月天,清风相合,阳光温婉。眯起眼回想这一路秋冬,幸有你们相伴。用最深的真情,哼最动听的青春之曲。 ...
    lan柒柒阅读 213评论 2 1