#38 打卡位置如何取得?利用CLLocationManager 取得位置

學習如何利用 Xcode debug View 來更正程式碼

--

每次使用 Facebook 打卡的時候,iphone是如何取得我們的位置的呢?

其實很簡單,可以利用 Core Location 這個框架(Framework)裡的CLLocationManager 類別(Class),這個 Class 就是來啟動和停止交付你的位置給 App的。

我們來看看該怎麼做?

首先我們來開啟一個新的專案,在 ViewController.swift載入CoreLocation 框架.

然後定義 locationManager 的類別為CLLocationManager

這樣我們就可以使用locationManager來取得位置的動作

再來我們要讓使用者同意APP 可以取得位置的權限

在 專案的 info 頁面加入Privacy — Location When In Use Usage Description的隱私請求,Value 的部分,可以寫為什麼需要取得這個權限。

然後在 viewDidLoad() 裡加上locationManager.requestWhenInUseAuthorization()

這樣打開 App 的時候就會出現請求位置權限的圖示

再來就是加入 locationManager 的 Delegate,我們將要使用 Delegate 裡的function

到目前為止, func viewDidLoad() 裡的程式如下,

再來,我們會用到 CLLocationManagerDelegatedidUpdateLocations function

程式碼如下

let location = locations.last!.coordinate

locations 是一個 Array,因為只要知道最後一個位置,所以定義 location 是 locationManager 取得最後的位置。

locationLabel.text = “目前位置為\n經度為\(location.longitude)\n緯度為\(location.latitude)”

在 locationLabel 顯示經緯度。

我們使用一個 Button,拉@IBAction,使用 locationManager.requestLocation()按下這個按鈕時便會抓取目前位置。

目前完整程式碼如下

讓模擬器開始模擬。

結果按下 button 時,出現了錯誤視窗,結果是delegate沒有加locationManager:didFailWithError 這個 function

把 Delegate 加上locationManager:didFailWithError

這樣按下button 就可以得到現在的經緯度

補充

1. locationLabel 的高度要多於 3 行,然後 Lines 要設 0

這樣才可以顯示多行

2. 在iPhone 上 模擬可以得到正確的經緯度,在電腦上要自己設定經緯度。

完整程式碼

--

--