在很多應用,使用位置定位來判斷用戶是不是在某個期望的地理位置。概念上說,你會將這個行爲想成名詞“現場”或者是“訪問”而不是原生的GPS定位。
略一段。。
在iOS8中,大蘋果爲我們解決此類問題提供了CLVisit
,一個新的後臺定位監測類型。一個但一個的CLVisit
表示用戶花了一段時間在一個單一的地方,包含了同一地理座標以及起始/結束時間戳。
理論上來說,使用訪問監控不會比其他的後臺定位做更多的活兒。簡單得調用manager.startMonitoringVisits()
可以啓動後臺訪問定位,假設用戶已經永久授權。一旦啓動,你的APP將會被後臺激活當有新的更新到來的時候(讓我想到了樂動力這個APP)。與基礎的定位不同,如果系統有一些的訪問更新隊列,你的代理方法locationManager:didReceiveUpdates:
將會調用多次,每次都只調用一個訪問,而不是一個CLLocation
對象數組。調用manager.stopMonitoringVisits()
將會停止定位跟蹤。
訪問處理句柄
每個CLVisit
對象包含着一些基礎屬性:平均座標,水平精度,以及數據到達與離開得時間戳。
每次訪問被記錄,CLLocationManagerDelegate
會被通知兩次:一旦用戶剛到達一個新地點,一個用戶剛準備離開這個地點。你可以通過departureDate
屬性計算出它們哪個是哪個;如果離開時間是NSDate.distantFuture()
意味着用戶還在那兒。
func locationManager(manager: CLLocationManager!, didVisit visit: CLVisit!) { if visit.departureDate.isEqualToDate(NSDate.distantFuture()) { // User has arrived, but not left, the location } else { // The visit is complete } }