一、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 <CoreLocation/CoreLocation.h>
 11
 12 @interface ViewController ()<CLLocationManagerDelegate>
 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 *)locations
119 {
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;

OC开发_整理笔记—— CoreLocation(1)基本使用相关推荐

  1. Java 微信公众号开发_学习笔记

    一.课程介绍 本套课程的学习内容,开发语言 微信公众号介绍,申请以及后台设置详解 编辑模式下的消息回复,菜单建立,素材管理等 开发前的环境搭建以及工具准备 开发者模式的切换.以及消息的接收与响应 百度 ...

  2. OC开发笔记之第二篇

    OC开发笔记之第二篇 讲的是方法的使用,有参,无参的调用,命名规范等 分为类的声明和实现 @interface 类名 : NSObject { } 方法的声明: @end @implementatio ...

  3. 韩顺平php可爱屋源码_韩顺平_php从入门到精通_视频教程_第20讲_仿sohu主页面布局_可爱屋首页面_学习笔记_源代码图解_PPT文档整理...

    韩顺平_php从入门到精通_视频教程_第20讲_仿sohu首页面布局_可爱屋首页面_学习笔记_源代码图解_PPT文档整理 对sohu页面的分析 注释很重要 经验:写一点,测试一点,这是一个很好的方法. ...

  4. 开发整理笔记Markdown基本使用

    Mou for Mac 整理笔记方便后期查看及使用 #标题 *无序排列 1.有序排列 引用 插入链接及插入图片: .代码框. 粗体 *斜体 表格如下图,较麻烦: ***分割线

  5. 阿里云服务器搭建python web环境_《Python入门》Linux 下 Python Web开发环境搭建笔记-阿里云开发者社区...

    之前写过 Windows 7下Python Web开发环境搭建笔记,今天写一下在Linux系统下搭建Python Web的开发测试环境. 我使用的系统是:ubuntu 14.04 server,根据个 ...

  6. ECCV2020超分辨率方向论文整理笔记

    ECCV2020超分辨率篇 ECCV的全称是European Conference on Computer Vision(欧洲计算机视觉国际会议) ,是计算机视觉三大顶级会议(另外两个是ICCV]和C ...

  7. U3D开发性能优化笔记(待增加版本.x)

    Amir Fasshihi 优化方案: 一.遇到麻烦时要调用"垃圾回收器"(Garbage Collector,无用单元收集程序,以下简称GC) 由于具有C/C++游戏编程背景,我 ...

  8. Java高级开发工程师面试笔记

    最近在复习面试相关的知识点,然后做笔记,后期(大概在2018.02.01)会分享给大家,尽自己最大的努力做到最好,还希望到时候大家能给予建议和补充 ----------------2018.03.05 ...

  9. xmpp整理笔记:xmppFramework框架的导入和介绍

    一个将要开发xmpp的项目,建议在项目刚创建就导入框架,这样可以避免一些自己操作失误造成不必要的损失. xmpp中最常用的框架就是 xmppFrameWork 往期回顾: xmpp整理笔记:环境的快速 ...

最新文章

  1. 实践Jenkins集成Cobertura自动化构建SpringBoot工程
  2. python数组排序奇数在前偶数在后_数组排列(奇数在前,偶数在后)
  3. 开放搜索查询分析服务架构解读
  4. 与梦城Typecho博客数据站+API站
  5. Dubbo(一) 使用Java RMI 实现RPC(远程过程调用)
  6. JDBC数据库编程:callableStatement接口
  7. python-scrapy框架学习笔记
  8. amazeui学习笔记--js插件(UI增强4)--下拉组件Dropdown
  9. 电子管功放制作指南_电子管功率放大器的简易设计
  10. Android8.0一键root,小米Mix 2(安卓8.0)一键ROOT详解教程,看教程ROOT
  11. python+selenium 定位元素踩过的坑
  12. 关于gitlab报错 would clobber existing tag 的解决办法
  13. 什么级别的企业可以进行数字化转型?
  14. (FortiGate)飞塔防火墙IPMAC绑定设置步骤
  15. 微信群机器人助手多群同步群发消息,管理100个微信群!
  16. 蓝月传奇怎么显示无服务器,关于此次蓝月传奇突然关闭的说明!
  17. OpenCV实践之路——使用imread()函数读取图片的六种正确姿势
  18. win10系统用什么测试软件,Win10系统如何测试软件兼容性?
  19. 什么是C语言和C++
  20. usb延长线线序_我应该使用哪种延长线?

热门文章

  1. HtmlAgilityPack 使用
  2. 170525、解决maven隐式依赖包版本问题
  3. iOS10 资料汇总:值得回看的 10 篇 iOS 热文
  4. 关于J2SE/Jsp/Sping/Hibernate/Struts2的视频下载
  5. java批量转换图片格式
  6. PHP基础3_数组,循环及函数
  7. QT中事件发送函数sendEvent()、postEvent()详解
  8. C++多线程编程分析-线程间通信
  9. MFC中char*,string和CString之间的转换
  10. vue = 什么意思_记录使用@vue/cli搭建Vue3项目完整流程