【问题标题】:Access pressure value from barometer in iOS从 iOS 中的气压计访问压力值
【发布时间】:2017-04-11 18:00:13
【问题描述】:

我想使用 Swift 访问 iPhone 上气压计的压力值。有人可以告诉我怎么做吗?我正在使用CLLocation 访问海拔高度。压力可以用同一个类吗?

编辑:

我在viewDidLoad() 方法中添加了以下内容,但它没有打印任何内容...请告知。

let altimeter = CMAltimeter()
    if CMAltimeter.isRelativeAltitudeAvailable() {
        altimeter.startRelativeAltitudeUpdates(to: OperationQueue.current!, withHandler: { data, error in
            if !(error != nil) {
                print("Relative Altitude: \(data?.relativeAltitude)")
                print("Relative Pressure: \(data?.pressure)")
                self.pressLabel.text = String(describing: data?.pressure)
            }
        })
    }

【问题讨论】:

  • 1) 你是在真正有气压计的真实设备上运行它吗? 2) 您的代码是否真的到达了对altimeter.startRelativeAltitudeUpdates 的调用? 3) 如果是,是error != nil?如果没有,打印error

标签: ios swift sensors


【解决方案1】:

气压计读数与位置无关。

您需要查看 Core Motion 库,特别是 CMAltitudeCMAltitudeData。示例见How to use CMAltitudeHandler in Swift?

【讨论】:

  • 请看我更新的代码。我在打印值时遇到问题。
  • 您在问题下方看到我的评论了吗?
  • 是的,我无法打印出任何错误,但通过从 github 复制另一个示例使其正常工作。
  • 如果您回答了我在该评论中提出的问题,这将很有帮助,以便提供完整的答案。它将帮助未来的读者。
【解决方案2】:

您需要保留对altimeter 的引用,否则当viewDidLoad() 完成时它会超出范围。

class ViewController: UIViewController {

    @IBOutlet weak var pressureLabel: UILabel!

    private var altimeter: CMAltimeter!

    override func viewDidLoad() {
        super.viewDidLoad()

        altimeter = CMAltimeter()

        guard let data = data else {
            print(error?.localizedDescription ?? "unknoen error")
            return
        }

        print("Relative Altitude: \(data.relativeAltitude)")
        print("Relative Pressure: \(data.pressure)")
        self.pressureLabel.text = String(describing: data.pressure)
    }
}

【讨论】:

    猜你喜欢
    • 2013-07-28
    • 1970-01-01
    • 1970-01-01
    • 2014-09-01
    • 1970-01-01
    • 2014-12-13
    • 2015-05-01
    • 2021-11-21
    • 1970-01-01
    相关资源
    最近更新 更多