如何以秒为单位确定CMDeviceMotion的年龄

Posted

技术标签:

【中文标题】如何以秒为单位确定CMDeviceMotion的年龄【英文标题】:How to determine the age of CMDeviceMotion in seconds 【发布时间】:2013-04-05 15:16:55 【问题描述】:

我希望能够在我的游戏过程中打开和关闭设备动态更新。但是在我关闭它们然后再次返回后,CMMotionManager 的 .deviceMotion 属性会在短时间内返回最后知道的 deviceMotion(大约 0.5 秒,直到它可以计算出新值,我猜)。

所以,我希望能够测试我获得的 CMDeviceMotion 对象的年龄,如果它们超过几秒钟,则忽略它们。

计算 CACurrentMediaTime() - deviceMotion.timestamp 似乎给了我准确的结果。但我担心这可能会在未来的设备或 ios 版本中中断。设备运动时间戳是否保证在未来与 CACurrentMediaTime() 保持可比性?有没有更好的方法来计算 CMDeviceMotion 时间戳的年龄?

来自 Apple 的文档:

CACurrentMediaTime()

通过调用 mach_absolute_time() 并将结果转换为秒数得出的 CFTimeInterval。

deviceMotion.timestamp

时间戳是自手机启动以来的时间量,以秒为单位。

【问题讨论】:

【参考方案1】:

我遇到了同样的问题,需要保留事件历史记录。我通过将 updateInterval 设置为非常低的值来解决这个问题,例如0.5。因此,Core Motion 无需重新初始化传感器,从而降低能耗。

【讨论】:

我没有将此标记为已接受的答案,因为它不能解决确切的问题,但我会投票赞成这个好主意,我没想到。我认为 CoreMotion 仍然需要主动计算设备的方向,所以我不确定这会节省多少功率/cpu,你有没有用它做任何基准测试? 我很久以前就读过这个建议(大约 2 年前,iPhone 4 和 iOS 4.x)。我做了一些测试,但还不足以以科学的方式将其称为基准。我当时的主要问题是重新启动 Core Motion 所需的初始化时间。今天可能这不是问题。 谢谢。这仍然是一个问题,至少对于我在游戏中动态切换控件的用例而言(大约需要一秒钟才能在我的 4s 上获得有用的更新)

以上是关于如何以秒为单位确定CMDeviceMotion的年龄的主要内容,如果未能解决你的问题,请参考以下文章

如何从给定城市的给定日期和时间获取 unix 纪元时间戳(以秒为单位)?

如何检查两个日期之间的差异(以秒为单位)?

如何在jquery中以秒为单位获取两个日期之间的差异?

如何在 Swift3 中以秒为单位将字符串更改为分钟?

如何测量 powershell 脚本中不同功能的持续时间(以秒为单位)?

如何在 Firestore Objective-c 上设置/更新数据时以秒为单位获取 Firebase 服务器时间?