博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
OC开发_整理笔记—— CoreLocation(1)基本使用
阅读量:6633 次
发布时间:2019-06-25

本文共 4158 字,大约阅读时间需要 13 分钟。

一、Core Location介绍

1、我们经常会用到了地图和定位功能,在iOS开发中,要想加入这2大功能,必须基于2个框架进行开发

     Map Kit :用于地图展示

    Core Location :用于地理定位

2、所以我们会经常听到2个热门专业术语

    LBS :Location Based Service

    SoLoMo :Social Local Mobile(索罗门)

3、CoreLocation框架使用须知

  使用Core Location首先导入主头文件 #import <CoreLocation/CoreLocation.h>

  CoreLocation框架中所有数据类型的前缀都是CL

  CoreLocation中使用CLLocationManager对象来做用户定位

4、而我们调用其实就是三个步骤

  (1 创建CoreLocation的管理者:mgr

    (2 成为Corelocation管理者的代理,监听位置的获取

  (3 开始监听

 

二、话不多说,先贴代码

  这是一个简单的获取当前地理位置经纬度的代码:

1 //  2 //  ViewController.m  3 //  地图初识  4 //  5 //  Created by zzl on 15/8/27.  6 //  Copyright (c) 2015年 zzl. All rights reserved.  7 //  8   9 #import "ViewController.h" 10 #import 
11 12 @interface ViewController ()
13 14 /** 管理者设置为全局*/ 15 @property(nonatomic,strong) CLLocationManager *mgr; 16 17 @end 18 19 @implementation ViewController 20 21 #pragma mark -- 懒加载 22 23 -(CLLocationManager *)mgr 24 { 25 if (!_mgr) { 26 _mgr = [[CLLocationManager alloc]init]; 27 } 28 return _mgr; 29 } 30 #pragma mark -- life cycle 31 32 - (void)viewDidLoad { 33 [super viewDidLoad]; 34 35 //1、创建CoreLocation的管理者:mgr 36 37 //2、成为Corelocation管理者的代理,监听位置的获取 38 self.mgr.delegate = self; 39 40 /* 41 iOS 7 只要开始定位,系统就会自动要求用户对你的应用程序授权,但是从iOS8开始,想要定位必须先主动请求 42 在iOS8中不仅仅需要自动请求,还需要在info.list中配置属性才能弹出窗口授权 43 44 NSLocationWhenInUserDescription 允许在前台获取GPS描述 45 NSLocationAlwaysInUserDescription 允许在后台获取GPS描述 46 */ 47 48 //2.1、 判断是不是iOS8 49 if([[UIDevice currentDevice].systemVersion floatValue] >= 8.0) 50 { 51 NSLog(@"8.0+"); 52 53 //一授权成功就会改变通知代理 54 [self.mgr requestAlwaysAuthorization]; // 请求前台和后台定位权限 55 //[self.mgr requestWhenInUseAuthorization]; // 请求前台定位权限 56 } 57 else 58 { 59 NSLog(@"7.0-"); 60 [self.mgr startUpdatingLocation]; 61 } 62 63 //3、开始监听 64 } 65 66 #pragma mark -- CoreLocation Delegate 67 68 /** 69 * 授权状态改变的时候会被调用 70 * 71 * @param manager 调用者 72 * @param status 调用的状态 73 */ 74 -(void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status 75 { 76 77 // CLAuthorizationStatus 78 /* 79 用户从未选择过权限 80 kCLAuthorizationStatusNotDetermined 81 82 无法使用定位服务,该状态用户无法改变 83 kCLAuthorizationStatusRestricted 84 85 用户拒绝该应用使用定位服务,或是定位服务总开关处于关闭状态 86 kCLAuthorizationStatusDenied 87 88 已经授权(废弃) 89 kCLAuthorizationStatusAuthorized 90 91 用户允许该程序无论何时都可以使用地理信息 92 kCLAuthorizationStatusAuthorizedAlways 93 94 用户同意程序在可见时使用地理位置 95 kCLAuthorizationStatusAuthorizedWhenInUse*/ 96 97 if (status == kCLAuthorizationStatusAuthorizedAlways || status == kCLAuthorizationStatusAuthorizedWhenInUse) 98 { 99 NSLog(@"授权成功");100 101 [self.mgr startUpdatingLocation];102 }103 else if(status == kCLAuthorizationStatusNotDetermined)104 {105 NSLog(@"等待用户授权");106 }107 else{108 NSLog(@"授权失败");109 }110 }111 112 /**113 * 获取到位置信息之后就会去调用(如果不做控制会频繁调用,浪费电量)114 *115 * @param manager 调用者116 * @param locations 获取到的地理位置信息117 */118 -(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations119 {120 NSLog(@"%s",__func__);121 122 CLLocation *local = [locations lastObject];123 124 //打印经纬度125 NSLog(@"%f,%f",local.coordinate.latitude,local.coordinate.longitude);126 127 128 }129 @end

 

三、一些注意的点

1、设置管理者、设置代理协议、开始监听三个步骤

2、iOS8以后因为隐私问题,需要主动去向用户申请地图的使用权限,需要另外判断

  (1 首先要判断是不是iOS8以后

  (2 然后 调用requestAlwaysAuthorization请求用户的同意

  (3 用户同意之后会自动调用代理方法 didChangeAuthorizationStatus

  (4 我们可以在上面的代理方法中判断权限的状态,当权限的状态是成功之后,我们就可以调用 startUpdatingLocation 开始监听了

  (5 同时,我们还是需要在info.list文件中增加一个项:“NSLocationAlwaysUsageDescription”,值可以任意

  (6 当然你以为已经成功的时候可能还有会iOS8独特的BUG在等着你,可能需要设置当前的一些运动状态,才会有不断调用的响应

    

3、locationManager代理方法一经启动定位会被频繁的调用,需要控制调用的次数

   例如:每隔多少米定位一次, 只有水平方向超过该值时才会重新定位

       // mgr.distanceFilter = 100;

 

转载于:https://www.cnblogs.com/daomul/archive/2012/10/14/2723408.html

你可能感兴趣的文章