【问题标题】:How to determine the age of CMDeviceMotion in seconds如何以秒为单位确定CMDeviceMotion的年龄
【发布时间】: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

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

【问题讨论】:

    标签: ios accelerometer core-motion cmmotionmanager


    【解决方案1】:

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

    【讨论】:

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