是否可以在Timer
內調用didUpdateLocations
?我的意思是......定位器在位置管理器
_timer = Timer.scheduledTimer(timeInterval: 10, target: self, selector: #selector(_:didUpdateLocations:)), userInfo: nil, repeats: true)
這是否正常工作?如果是,那麼它將每隔10秒更新一次位置?
是否可以在Timer
內調用didUpdateLocations
?我的意思是......定位器在位置管理器
_timer = Timer.scheduledTimer(timeInterval: 10, target: self, selector: #selector(_:didUpdateLocations:)), userInfo: nil, repeats: true)
這是否正常工作?如果是,那麼它將每隔10秒更新一次位置?
您無法調用didUpdateLocations。如果你想頻繁的更新,您最好的選擇是在標準位置服務:
的標準位置的服務是最適合的應用程序, 直接提供與位置相關的信息給用戶,但它可能 通過其他類型的使用的應用程序。要啓動該服務,請配置 期望的位置 管理器的準確度和距離過濾器屬性,然後調用requestLocation(),startUpdatingLocation(), 或allowDeferredLocationUpdates(untilTraveled:timeout :)方法。從不 指定的精度值比您需要的大。核心位置 使用您指定的精度值更好地管理電源。精度要求更高的精度要求更精確的硬件,如GPS,其中 消耗更多的功率。
https://developer.apple.com/reference/corelocation/cllocationmanager
你的回調選擇必須有一個不同的簽名:
class MyClass {
func startTimer() {
_timer = Timer.scheduledTimer(timeInterval: 10, target: self, selector: #selector(MyClass.timerCallBack(_:)), userInfo: nil, repeats: true)
}
// ...
func timerCallBack(timer: Timer) {
// Here you go.
}
}
(可能包含一些語法錯誤;目前不具備的Xcode在手)
是的,我知道它可能會調用做smith的函數,但是正是我想要的是一段時間後的用戶位置 – yerpy
你不能這樣做。你可以在位置管理器上調用'requestLocation',但是這會觸發對你的委託'locationManager(_:didUpdateLocations:)'實現的_async_調用。沒有_synced_這樣做的方法 –
不要基於時間間隔的位置,因爲這不是賭注的方式,你可能會消耗大量的電池。最好監控用戶行走或駕駛的動作(使用coremotion框架),並根據距離過濾器獲取位置,每隔10米或更長時間進行設置。當用戶處於靜止狀態時,請確保暫停您的位置更新,或者將位置管理器的期望精度設置爲3公里,並將距離過濾器設置爲更高的值。 –