iOS 實(shí)戰(zhàn)筆記5-(Geekband)

要實(shí)現(xiàn)地圖、導(dǎo)航功能,往往需要先熟悉定位功能觅丰,在iOS中通過(guò)Core Location框架進(jìn)行定位操作。Core Location自身可以單獨(dú)使用妨退,和地圖開(kāi)發(fā)框架MapKit完全是獨(dú)立的妇萄,但是往往地圖開(kāi)發(fā)要配合定位框架使用。在Core Location中主要包含了定位咬荷、地理編碼(包括反編碼)功能冠句。

定位功能

定位是一個(gè)很常用的功能,如一些地圖軟件打開(kāi)之后如果用戶允許軟件定位的話幸乒,那么打開(kāi)軟件后就會(huì)自動(dòng)鎖定到當(dāng)前位置懦底,如果用戶手機(jī)移動(dòng)那么當(dāng)前位置也會(huì)跟隨著變化。要實(shí)現(xiàn)這個(gè)功能需要使用Core Loaction中CLLocationManager類逝变,首先看一下這個(gè)類的一些主要方法和屬性:

類方法 說(shuō)明

+ (BOOL)locationServicesEnabled; 是否啟用定位服務(wù)基茵,通常如果用戶沒(méi)有啟用定位服務(wù)可以提示用戶打開(kāi)定位服務(wù)

+ (CLAuthorizationStatus)authorizationStatus; 定位服務(wù)授權(quán)狀態(tài),返回枚舉類型:

kCLAuthorizationStatusNotDetermined: 用戶尚未做出決定是否啟用定位服務(wù)

kCLAuthorizationStatusRestricted: 沒(méi)有獲得用戶授權(quán)使用定位服務(wù),可能用戶沒(méi)有自己禁止訪問(wèn)授權(quán)

kCLAuthorizationStatusDenied :用戶已經(jīng)明確禁止應(yīng)用使用定位服務(wù)或者當(dāng)前系統(tǒng)定位服務(wù)處于關(guān)閉狀態(tài)

kCLAuthorizationStatusAuthorizedAlways: 應(yīng)用獲得授權(quán)可以一直使用定位服務(wù)壳影,即使應(yīng)用不在使用狀態(tài)

kCLAuthorizationStatusAuthorizedWhenInUse: 使用此應(yīng)用過(guò)程中允許訪問(wèn)定位服務(wù)

屬性 說(shuō)明

desiredAccuracy 定位精度,枚舉類型:

kCLLocationAccuracyBest:最精確定位

CLLocationAccuracy kCLLocationAccuracyNearestTenMeters:十米誤差范圍

kCLLocationAccuracyHundredMeters:百米誤差范圍

kCLLocationAccuracyKilometer:千米誤差范圍

kCLLocationAccuracyThreeKilometers:三千米誤差范圍

distanceFilter 位置信息更新最小距離弥臼,只有移動(dòng)大于這個(gè)距離才更新位置信息宴咧,默認(rèn)為kCLDistanceFilterNone:不進(jìn)行距離限制

對(duì)象方法 說(shuō)明

startUpdatingLocation 開(kāi)始定位追蹤,開(kāi)始定位后將按照用戶設(shè)置的更新頻率執(zhí)行-(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations;方法反饋定位信息

stopUpdatingLocation 停止定位追蹤

startUpdatingHeading 開(kāi)始導(dǎo)航方向追蹤

stopUpdatingHeading 停止導(dǎo)航方向追蹤

startMonitoringForRegion: 開(kāi)始對(duì)某個(gè)區(qū)域進(jìn)行定位追蹤径缅,開(kāi)始對(duì)某個(gè)區(qū)域進(jìn)行定位后掺栅。如果用戶進(jìn)入或者走出某個(gè)區(qū)域會(huì)調(diào)用- (void)locationManager:(CLLocationManager *)manager

didEnterRegion:(CLRegion *)region和- (void)locationManager:(CLLocationManager *)manager

didExitRegion:(CLRegion *)region代理方法反饋相關(guān)信息

stopMonitoringForRegion: 停止對(duì)某個(gè)區(qū)域進(jìn)行定位追蹤

requestWhenInUseAuthorization 請(qǐng)求獲得應(yīng)用使用時(shí)的定位服務(wù)授權(quán),注意使用此方法前在要在info.plist中配置NSLocationWhenInUseUsageDescription

requestAlwaysAuthorization 請(qǐng)求獲得應(yīng)用一直使用定位服務(wù)授權(quán)纳猪,注意使用此方法前要在info.plist中配置NSLocationAlwaysUsageDescription

代理方法 說(shuō)明

-(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations; 位置發(fā)生改變后執(zhí)行(第一次定位到某個(gè)位置之后也會(huì)執(zhí)行)

- (void)locationManager:(CLLocationManager *)manager

didUpdateHeading:(CLHeading *)newHeading; 導(dǎo)航方向發(fā)生變化后執(zhí)行

- (void)locationManager:(CLLocationManager *)manager

didEnterRegion:(CLRegion *)region 進(jìn)入某個(gè)區(qū)域之后執(zhí)行

- (void)locationManager:(CLLocationManager *)manager

didExitRegion:(CLRegion *)region 走出某個(gè)區(qū)域之后執(zhí)行

注意:

1.定位頻率和定位精度并不應(yīng)當(dāng)越精確越好氧卧,需要視實(shí)際情況而定,因?yàn)樵骄_越耗性能氏堤,也就越費(fèi)電沙绝。

2.定位成功后會(huì)根據(jù)設(shè)置情況頻繁調(diào)用-(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations方法,這個(gè)方法返回一組地理位置對(duì)象數(shù)組,每個(gè)元素一個(gè)CLLocation代表地理位置信息(包含經(jīng)度闪檬、緯度星著、海報(bào)、行走速度等信息)粗悯,之所以返回?cái)?shù)組是因?yàn)橛行r(shí)候一個(gè)位置點(diǎn)可能包含多個(gè)位置虚循。

3.使用完定位服務(wù)后如果不需要實(shí)時(shí)監(jiān)控應(yīng)該立即關(guān)閉定位服務(wù)以節(jié)省資源。

4.除了提供定位功能样傍,CLLocationManager還可以調(diào)用startMonitoringForRegion:方法對(duì)指定區(qū)域進(jìn)行監(jiān)控横缔。

地理編碼

除了提供位置跟蹤功能之外,在定位服務(wù)中還包含CLGeocoder類用于處理地理編碼和逆地理編碼(又叫反地理編碼)功能衫哥。

地理編碼:根據(jù)給定的位置(通常是地名)確定地理坐標(biāo)(經(jīng)剪廉、緯度)。

逆地理編碼:可以根據(jù)地理坐標(biāo)(經(jīng)炕檩、緯度)確定位置信息(街道斗蒋、門牌等)。

用戶位置跟蹤

在很多帶有地圖的應(yīng)用中默認(rèn)打開(kāi)地圖都會(huì)顯示用戶當(dāng)前位置笛质,同時(shí)將當(dāng)前位置標(biāo)記出來(lái)放到屏幕中點(diǎn)方便用戶對(duì)周圍情況進(jìn)行查看泉沾。如果在iOS6或者iOS7中實(shí)現(xiàn)這個(gè)功能只需要添加地圖控件、設(shè)置用戶跟蹤模式妇押、在-(void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation代理方法中設(shè)置地圖中心區(qū)域及顯示范圍跷究。但是在iOS8中用法稍有不同:

1.由于在地圖中進(jìn)行用戶位置跟蹤需要使用定位功能,而定位功能在iOS8中設(shè)計(jì)發(fā)生了變化敲霍,因此必須按照前面定位章節(jié)中提到的內(nèi)容進(jìn)行配置和請(qǐng)求俊马。

2.iOS9中不需要進(jìn)行中心點(diǎn)的指定,默認(rèn)會(huì)將當(dāng)前位置設(shè)置中心點(diǎn)并自動(dòng)設(shè)置顯示區(qū)域范圍肩杈。

了解以上兩點(diǎn)柴我,要進(jìn)行用戶位置跟蹤其實(shí)就相當(dāng)簡(jiǎn)單了,值得一提的是-(void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation這個(gè)代理方法扩然。這個(gè)方法只有在定位(利用前面章節(jié)中的定位內(nèi)容)到當(dāng)前位置之后就會(huì)調(diào)用艘儒,以后每當(dāng)用戶位置發(fā)生改變就會(huì)觸發(fā),調(diào)用頻率相當(dāng)頻繁夫偶。

大頭針

在iOS開(kāi)發(fā)中經(jīng)常會(huì)標(biāo)記某個(gè)位置界睁,需要使用地圖標(biāo)注,也就是大家俗稱的“大頭針”兵拢。只要一個(gè)NSObject類實(shí)現(xiàn)MKAnnotation協(xié)議就可以作為一個(gè)大頭針翻斟,通常會(huì)重寫協(xié)議中coordinate(標(biāo)記位置)、title(標(biāo)題)说铃、subtitle(子標(biāo)題)三個(gè)屬性访惜,然后在程序中創(chuàng)建大頭針對(duì)象并調(diào)用addAnnotation:方法添加大頭針即可(之所以iOS沒(méi)有定義一個(gè)基類實(shí)現(xiàn)這個(gè)協(xié)議供開(kāi)發(fā)者使用嘹履,多數(shù)原因應(yīng)該是MKAnnotation是一個(gè)模型對(duì)象,對(duì)于多數(shù)應(yīng)用模型會(huì)稍有不同疾牲,例如后面的內(nèi)容中會(huì)給大頭針模型對(duì)象添加其他屬性)植捎。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市阳柔,隨后出現(xiàn)的幾起案子焰枢,更是在濱河造成了極大的恐慌,老刑警劉巖舌剂,帶你破解...
    沈念sama閱讀 222,590評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件济锄,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡霍转,警方通過(guò)查閱死者的電腦和手機(jī)荐绝,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,157評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)避消,“玉大人低滩,你說(shuō)我怎么就攤上這事⊙遗纾” “怎么了恕沫?”我有些...
    開(kāi)封第一講書(shū)人閱讀 169,301評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)纱意。 經(jīng)常有香客問(wèn)我婶溯,道長(zhǎng),這世上最難降的妖魔是什么偷霉? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 60,078評(píng)論 1 300
  • 正文 為了忘掉前任迄委,我火速辦了婚禮,結(jié)果婚禮上类少,老公的妹妹穿的比我還像新娘叙身。我一直安慰自己,他們只是感情好瞒滴,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,082評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布曲梗。 她就那樣靜靜地躺著,像睡著了一般妓忍。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上愧旦,一...
    開(kāi)封第一講書(shū)人閱讀 52,682評(píng)論 1 312
  • 那天世剖,我揣著相機(jī)與錄音,去河邊找鬼笤虫。 笑死旁瘫,一個(gè)胖子當(dāng)著我的面吹牛祖凫,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播酬凳,決...
    沈念sama閱讀 41,155評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼惠况,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了宁仔?” 一聲冷哼從身側(cè)響起稠屠,我...
    開(kāi)封第一講書(shū)人閱讀 40,098評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎翎苫,沒(méi)想到半個(gè)月后权埠,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,638評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡煎谍,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,701評(píng)論 3 342
  • 正文 我和宋清朗相戀三年攘蔽,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片呐粘。...
    茶點(diǎn)故事閱讀 40,852評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡满俗,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出作岖,到底是詐尸還是另有隱情唆垃,我是刑警寧澤,帶...
    沈念sama閱讀 36,520評(píng)論 5 351
  • 正文 年R本政府宣布鳍咱,位于F島的核電站降盹,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏谤辜。R本人自食惡果不足惜蓄坏,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,181評(píng)論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望丑念。 院中可真熱鬧涡戳,春花似錦、人聲如沸脯倚。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,674評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)推正。三九已至恍涂,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間植榕,已是汗流浹背再沧。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,788評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留尊残,地道東北人炒瘸。 一個(gè)月前我還...
    沈念sama閱讀 49,279評(píng)論 3 379
  • 正文 我出身青樓淤堵,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親顷扩。 傳聞我的和親對(duì)象是個(gè)殘疾皇子拐邪,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,851評(píng)論 2 361

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