iO78.0 定位
1.前臺定位
1.創(chuàng)建位置管理者 CLLocationManager
并設(shè)置代理
lazy var locationM : CLLocationManager = {
let locationM = CLLocationManager()
locationM.delegate = self
return locationM
}()
2.開始定位,調(diào)用方法,更新位置信息
locationM.startUpdatingLocation()
3.在CLLocationManagerDelegate
的代理方法中獲取用戶位置信息
extension ViewController : CLLocationManagerDelegate {
func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
print("每次請求到位置信息,都會調(diào)用這個代理方法")
}
}
使用位置管理者進行定位補充:
-
1.如果想要使用位置管理者來開始實現(xiàn)某一個功能 :
開啟功能: start
停止這個功能 : stop
2.一旦調(diào)用了startUpdatingLocation() 這個方法,就會不斷的獲取用戶的位置信息
-
3.在 iOS6.0之后,如果想要獲取用戶的隱私(照片,通信),系統(tǒng)會主動彈框讓用戶授權(quán),
一旦用戶選則了don't allow 意味著再也無法獲取用戶的位置信息.除非用戶到設(shè)置界面,設(shè)置允許你的app來獲取當(dāng)前的位置
4.可以在info.plist文件中, 配置Privacy - Location Usage Description 來說明定位目的
2.后臺定位
條件:
- 在前臺基礎(chǔ)上,勾選后臺模式location updates或者直接info.plist文件,添加
Required background modes
(兩者實現(xiàn)同一個操作)
操作:
- Capabilities -> Background Models -> 選中Location updates 打鉤
map01a.png
- info.plist操作:
添加Required background modes->
App registers for location updates
map01b.png
3. 定位不到, 對應(yīng)的代理方法不執(zhí)行
解決:
- 首先,檢查運行的模擬器是否是iOS8.0之前的系統(tǒng)版本
- 其次,檢查模擬器是否設(shè)置位置數(shù)據(jù)
- 第三,確保代碼無問題(一般都是代理沒有設(shè)置,或者位置管理器對象是局部變量)
- 第四,模擬器BUG, 請將模擬器位置設(shè)為None,然后再次設(shè)置數(shù)據(jù); 或者,重置模擬器