我最近一直在使用 Core Motion 的框架,并试图从有限的 CMAltitude 类中获得更多的能量,只是在通话结束时偶然发现了一些奇怪的数据。因此,如果您调用,则要重新创建:
import UIKit
import CoreMotion
class ViewController: UIViewController {
let corey = CMAltimeter()
override func viewDidLoad() {
super.viewDidLoad()
self.getter()
}
@objc func getter() {
corey.startRelativeAltitudeUpdates(to: OperationQueue.main, withHandler: { (altitudeData:CMAltitudeData?, error:Error?) in
print(String(describing: altitudeData.unsafelyUnwrapped))
仅出于视觉目的,做这个非常粗糙的事情会得到以下响应:
Altitude -0.589237 Pressure 101093.882812 @ 2377.566172
Altitude -0.618303 Pressure 101094.234375 @ 2378.602637
Altitude -0.618303 Pressure 101094.234375 @ 2379.640150
Altitude -0.620945 Pressure 101094.250000 @ 2380.678124
Altitude -0.628872 Pressure 101094.343750 @ 2381.714421
我想知道的是最后一部分@ 2381.714421
,它看起来像秒,但实际上我不太确定,当与计时器和启动时间time_t<进行比较时
该数字开始 +4 秒,经过一段时间的不活动后,它会漂移并变得比启动时间短。
它是否会因为应用程序不活动而消失? 但为什么它的启动时间比启动时间还长呢?
谁能解释一下这是怎么回事?
最佳答案
CMAltitudeData
继承自 CMLogItem
,这是最后一个字段 timestamp
的来源。根据documentation , timestamp
应与设备启动后的时间(以秒为单位)相匹配。
但是,根据this关于SO的问题,启动时间确实会略有偏差,并且timestamp
似乎并不简单地在每次测量时复制time_t
,而是在第一次测量和之后复制它它只是根据不同的计时器来增加它。与 Timer
相比并不是一个好主意,因为 Timer
在运行循环上运行,因此它仅在您的应用程序位于前台时才起作用,即使如此,它也不是真正的精确。
关于ios - CMAltitudeData 最后有一些奇怪的数据,有什么想法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45670490/