SwiftUI Live 位置更新
Posted
技术标签:
【中文标题】SwiftUI Live 位置更新【英文标题】:SwiftUI Live location update 【发布时间】:2020-07-06 19:27:07 【问题描述】:我在我的一个 ObservableObjects 中实现了CLLocationManagerDelegate
,并且我希望在位置发生变化时得到通知。一切正常,但我打印了一次“位置已更改”。我的猜测是我应该从外面打电话给manager.startUpdatingLocation()
,但我不知道具体从哪里来。
import CoreLocation
import Combine
class LocationManagerService: NSObject, ObservableObject, CLLocationManagerDelegate
var manager: CLLocationManager = CLLocationManager()
@Published var location: CLLocation?
@Published var enabled: Bool = false
override init()
super.init()
manager.delegate = self
if CLLocationManager.locationServicesEnabled()
manager.requestWhenInUseAuthorization()
// manager.requestAlwaysAuthorization()
manager.startUpdatingLocation()
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation])
print("location changed") // prints only once
location = locations.first
manager.stopUpdatingLocation()
func locationManagerDidChangeAuthorization(_ manager: CLLocationManager)
enabled = CLLocationManager.locationServicesEnabled()
【问题讨论】:
【参考方案1】:评论停止更新的这一行
location = locations.first
manager.stopUpdatingLocation() // this
【讨论】:
哇,真快。谢谢!。有没有办法检查是否有重大的位置变化?让我们说不是每 1 厘米更新一次而是每公里更新一次? 你可以用startMonitoringSignificantLocationChanges
代替developer.apple.com/documentation/corelocation/…以上是关于SwiftUI Live 位置更新的主要内容,如果未能解决你的问题,请参考以下文章
无法从用户位置 SwiftUi 更新 CLLocation()
SwiftUI:如何使用位置管理器类的已发布属性更新一个类(ObservableObject)的已发布属性?
@ObservedObject 更改后 SwiftUI 视图未更新