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 不断更新坐标位置

SwiftUI:如何使用位置管理器类的已发布属性更新一个类(ObservableObject)的已发布属性?

@ObservedObject 更改后 SwiftUI 视图未更新

如何使用@EnvironmentObject 在 SwiftUI 中自动填充和更新列表?

如何在视图启动之前在 SwiftUI 中加载更新的变量?