美文网首页常用组件iOS点点滴滴iOS 开发
封装CLLocationManager, 更简单的使用

封装CLLocationManager, 更简单的使用

作者: RealSlimAlan | 来源:发表于2016-06-16 17:54 被阅读346次

    其实苹果自身的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

    相关文章

      网友评论

      • 素酥:请问下如何定位到区的⋯⋯为什么我在香港有时候定位到区有时候定位到地方名的
      • c412131e53e9:谢谢您的分享

      本文标题:封装CLLocationManager, 更简单的使用

      本文链接:https://www.haomeiwen.com/subject/gwvmdttx.html