封裝CLLocationManager, 更簡單的使用

其實(shí)蘋果自身的CLLocationManager挺好用的, 定位準(zhǔn)確, 就是每次使用的時(shí)候,要寫一堆東西.上個(gè)項(xiàng)目中,我有三處地方都用到了定位, 但是同樣的代碼我不想寫第二遍. 于是我把這個(gè)CLLocationManager再封裝了一層. 作為一個(gè)單例給外界使用.
首先要封裝,我們還是要使用CLLocationManager. 我們記得要現(xiàn)在info.plist中添加字段.(沒有這個(gè)字段的話,就定位不了)
字段二選一就好了:
NSLocationAlwaysUsageDescription
NSLocationWhenInUseUsageDescription


QQ20160616-3.png

然后為了更加方便的使用,再創(chuàng)建了一個(gè)城市類:


QQ20160616-1.png

然后我們看單例的.h文件:


QQ20160616-6.png

也很簡單,暴露出去的屬性只有一個(gè)代理.
然后是方法,一個(gè)返回單例,還有開始,結(jié)束,最后一個(gè)是currentPlaceMark返回當(dāng)前的地理編碼.
最后看代理:
只有一個(gè)方法,就是定位結(jié)果的回調(diào).有一個(gè)bool值告訴我們定位是成功還是失敗了.

最后看.m文件:


QQ20160616-8.png

從屬性中可以看到,CLLocationManager是一個(gè)屬性, 我們就是用這個(gè)屬性去做定位的.然后是我們當(dāng)前的城市模型以及原始的地理編碼. 最后是一個(gè)updated屬性. 作用于是否停止定位.
然后是千篇一律的單例寫法, 我們?cè)诔跏蓟臅r(shí)候給locationManager創(chuàng)建了一個(gè)CLLocationManager對(duì)象. 最后記得判斷下當(dāng)前版本.如果是8.0以上的話, 需要設(shè)置requestWhenInUseAuthorization或者requestAlwaysAuthorization.才能正常使用定位功能.

然后是開始定位方法.最終會(huì)讓CLLocationManager對(duì)象發(fā)起定位,
定位成功會(huì)調(diào)用這個(gè)方法:


QQ20160616-9.png

可以看到這段代碼很長. 但是我們真正需要的,只是在定位成功后,把城市獲取出來,然后就可以關(guān)閉定位,設(shè)置updated值為YES(由于定位會(huì)不斷執(zhí)行多次,而其實(shí)第一次的定位就已經(jīng)很準(zhǔn)確了,所以我們可以在獲得后馬上跳出循環(huán)).再通過代理方法,把城市返回出去.

定位失敗會(huì)調(diào)用這個(gè)方法:


QQ20160616-11.png

其實(shí)我并沒有遇到定位失敗的情況啦. 但是我還是通過代理告訴外界定位失敗了.

最后剩下的是外界能調(diào)用的兩個(gè)方法:


QQ20160616-12.png

一個(gè)是停止定位,另外一個(gè)是返回原始地理編碼.

以上就是我封裝的定位工具. 非常的簡單. 返回的地址,我只把城市返回出去. 有需要的同學(xué)可以給城市類多添加街道或者區(qū)域等更詳細(xì)的屬性.

控制器的調(diào)用也就幾行代碼:

QQ20160616-13.png

github上有個(gè)小demo:https://github.com/byljbdh/ALNLocationTool

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 134,993評(píng)論 19 139
  • 國家電網(wǎng)公司企業(yè)標(biāo)準(zhǔn)(Q/GDW)- 面向?qū)ο蟮挠秒娦畔?shù)據(jù)交換協(xié)議 - 報(bào)批稿:20170802 前言: 排版 ...
    庭說閱讀 11,186評(píng)論 6 13
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法,內(nèi)部類的語法,繼承相關(guān)的語法,異常的語法,線程的語...
    子非魚_t_閱讀 31,779評(píng)論 18 399
  • 對(duì)于普通企業(yè)的產(chǎn)能而言,他們面對(duì)的市場是全球的行業(yè)總體市場需求,這使得他們所占市場份額大多接近于零,意思就是每個(gè)企...
    花經(jīng)理閱讀 747評(píng)論 0 0
  • 小學(xué)六年級(jí)的時(shí)候,不知道哪一天,說不上為什么,咪咪突然就覺得看吳勇很順眼了。 大概是因?yàn)閾Q同桌的關(guān)系,咪咪被換到了...
    亭子文閱讀 580評(píng)論 3 1