封装CLLocationManager, 更简单的使用

其实苹果自身的CLLocationManager挺好用的, 定位准确, 就是每次使用的时候,要写一堆东西.上个项目中,我有三处地方都用到了定位, 但是同样的代码我不想写第二遍. 于是我把这个CLLocationManager再封装了一层. 作为一个单例给外界使用.
首先要封装,我们还是要使用CLLocationManager. 我们记得要现在info.plist中添加字段.(没有这个字段的话,就定位不了)
字段二选一就好了:
NSLocationAlwaysUsageDescription
NSLocationWhenInUseUsageDescription


QQ20160616-3.png

然后为了更加方便的使用,再创建了一个城市类:


QQ20160616-1.png

然后我们看单例的.h文件:


QQ20160616-6.png

也很简单,暴露出去的属性只有一个代理.
然后是方法,一个返回单例,还有开始,结束,最后一个是currentPlaceMark返回当前的地理编码.
最后看代理:
只有一个方法,就是定位结果的回调.有一个bool值告诉我们定位是成功还是失败了.

最后看.m文件:


QQ20160616-8.png

从属性中可以看到,CLLocationManager是一个属性, 我们就是用这个属性去做定位的.然后是我们当前的城市模型以及原始的地理编码. 最后是一个updated属性. 作用于是否停止定位.
然后是千篇一律的单例写法, 我们在初始化的时候给locationManager创建了一个CLLocationManager对象. 最后记得判断下当前版本.如果是8.0以上的话, 需要设置requestWhenInUseAuthorization或者requestAlwaysAuthorization.才能正常使用定位功能.

然后是开始定位方法.最终会让CLLocationManager对象发起定位,
定位成功会调用这个方法:


QQ20160616-9.png

可以看到这段代码很长. 但是我们真正需要的,只是在定位成功后,把城市获取出来,然后就可以关闭定位,设置updated值为YES(由于定位会不断执行多次,而其实第一次的定位就已经很准确了,所以我们可以在获得后马上跳出循环).再通过代理方法,把城市返回出去.

定位失败会调用这个方法:


QQ20160616-11.png

其实我并没有遇到定位失败的情况啦. 但是我还是通过代理告诉外界定位失败了.

最后剩下的是外界能调用的两个方法:


QQ20160616-12.png

一个是停止定位,另外一个是返回原始地理编码.

以上就是我封装的定位工具. 非常的简单. 返回的地址,我只把城市返回出去. 有需要的同学可以给城市类多添加街道或者区域等更详细的属性.

控制器的调用也就几行代码:

QQ20160616-13.png

github上有个小demo:https://github.com/byljbdh/ALNLocationTool

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 131,219评论 18 138
  • 国家电网公司企业标准(Q/GDW)- 面向对象的用电信息数据交换协议 - 报批稿:20170802 前言: 排版 ...
    庭说阅读 9,045评论 6 13
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 30,459评论 18 399
  • 对于普通企业的产能而言,他们面对的市场是全球的行业总体市场需求,这使得他们所占市场份额大多接近于零,意思就是每个企...
    花经理阅读 391评论 0 0
  • 小学六年级的时候,不知道哪一天,说不上为什么,咪咪突然就觉得看吴勇很顺眼了。 大概是因为换同桌的关系,咪咪被换到了...
    亭子文阅读 400评论 3 1
  • 人的生活总是看起来很好的。 我们经常会羡慕别人,因为别人的生活总比自己惬意轻松,烦恼似乎都没有。可这真的是真的吗?
    一只猫的情仇爱恨阅读 54评论 0 0
  • 有人说:“现在的中国人,是信仰和价值观缺失的一代人。” 这一观点我不敢苟同,但却也无力反驳。 当今世界是一个文化多...
    oooooliviaaaaa阅读 971评论 1 5