天天看點

iOS開發拓展篇—CoreLocation定位服務

一、簡單說明

1.cllocationmanager

cllocationmanager的常用操作和屬性

開始使用者定位- (void)startupdatinglocation;

停止使用者定位- (void) stopupdatinglocation;

說明:當調用了startupdatinglocation方法後,就開始不斷地定位使用者的位置,中途會頻繁地調用代理的下面方法

  - (void)locationmanager:(cllocationmanager *)manager didupdatelocations:(nsarray *)locations;

每隔多少米定位一次

  @property(assign, nonatomic) cllocationdistance distancefilter;

定位精确度(越精确就越耗電)

  @property(assign, nonatomic) cllocationaccuracy desiredaccuracy;

2.cllocation

cllocation用來表示某個位置的地理資訊,比如經緯度、海拔等等

(1)經緯度

  @property(readonly, nonatomic) cllocationcoordinate2d coordinate;

(2)海拔

  @property(readonly, nonatomic) cllocationdistance altitude;

(3)路線,航向(取值範圍是0.0° ~ 359.9°,0.0°代表真北方向)

  @property(readonly, nonatomic) cllocationdirection course;

(4)行走速度(機關是m/s)

   @property(readonly, nonatomic) cllocationspeed speed;

(5)計算2個位置之間的距離

  - (cllocationdistance)distancefromlocation:(const cllocation *)location方法

3.cllocationcoordinate2d

cllocationcoordinate2d是一個用來表示經緯度的結構體,定義如下

typedef struct {

cllocationdegrees latitude; // 緯度

cllocationdegrees longitude; // 經度

} cllocationcoordinate2d;

一般用cllocationcoordinate2dmake函數來建立cllocationcoordinate2d

二、代碼示例

iOS開發拓展篇—CoreLocation定位服務
iOS開發拓展篇—CoreLocation定位服務

列印檢視:

iOS開發拓展篇—CoreLocation定位服務

代碼說明:

1.關于代理方法

  需要設定代理,通過代理告訴使用者目前的位置,有兩個代理方法:

  locations參數裡面裝着cllocation對象

iOS開發拓展篇—CoreLocation定位服務

其中後者是一個過期的方法,在新的方法(第一個)中使用了一個數組來替代。

說明:該方法在當定位到使用者的位置時就會調用,調用比較頻繁

注意:不要使用局部變量(建立位置管理器),因為局部變量的方法結束它就被銷毀了。建議使用一個全局的變量,且隻建立一次就可以了(使用懶加載)。

2.定位的精度

iOS開發拓展篇—CoreLocation定位服務

3.如果發現自己的定位服務沒有打開,那麼應該提醒使用者打開定位服務功能。

4.定位服務是比較耗電的,如果是做定位服務(沒必要實時更新的話),那麼定位了使用者位置後,應該停止更新位置。

三、使用者隐私的保護

1.權限設定說明

從ios 6開始,蘋果在保護使用者隐私方面做了很大的加強,以下操作都必須經過使用者準許授權

(1)要想獲得使用者的位置

(2)想通路使用者的通訊錄、月曆、相機、相冊等

當想通路使用者的隐私資訊時,系統會自動彈出一個對話框讓使用者授權

iOS開發拓展篇—CoreLocation定位服務

注意:一旦使用者選擇了“don’t allow”,意味着你的應用以後就無法使用定位功能,且當使用者第一次選擇了之後,以後就再也不會提醒進行設定。

是以在程式中應該進行判斷,如果發現自己的定位服務沒有打開,那麼應該提醒使用者打開定位服務功能。

cllocationmanager有個類方法可以判斷目前應用的定位功能是否可用+ (bool)locationservicesenabled;

  常用的方法:截圖告訴使用者,應該怎麼打開授權

2.開發者可以在info.plist中設定nslocationusagedescription說明定位的目的(privacy - location usage description)

iOS開發拓展篇—CoreLocation定位服務

說明:這裡的定位服務是基于網絡的。通常定位服務可以是基于gps、基站或者是網絡的。

繼續閱讀