【问题标题】:iOS- start receiving gyroscope updatesiOS-开始接收陀螺仪更新
【发布时间】:2011-08-29 20:26:28
【问题描述】:

我使用 CMMotionManager 来访问 iOS 的陀螺仪数据。我看到有两种方法:

startGyroUpdates 
startGyroUpdatesToQueue:withHandler:

开始接收陀螺仪更新。我们如何区分调用这两种方法。可以调用其中任何一个的情况是什么?一个比另一个重要吗?

任何帮助表示赞赏,

【问题讨论】:

    标签: ios gyroscope


    【解决方案1】:

    队列用于保证处理所有事件,即使您在deviceMotionUpdateInterval 中设置的更新间隔以比您实时处理的速度更快的速度产生事件。如果您不介意错过事件,则使用两者中的哪一个都没关系,只需丢弃它们即可。

    相关的 Apple 文档是事件处理指南的 Core Motion 部分:

    对于上述每种数据运动类型,CMMotionManager 类提供了两种获取运动数据的方法,一种是推送方法 和拉式方法:

    • 推。应用程序请求更新间隔并实现 用于处理运动数据的块(特定类型);然后 开始更新该类型的运动数据,传递给 Core Motion 操作队列和块。 Core Motion 提供每个 更新到块,它作为操作队列中的任务执行。

    • 拉。应用程序开始更新一种运动数据,并 定期对运动数据的最新测量值进行采样。

    对于大多数应用程序来说,拉取方法是推荐的方法, 尤其是游戏;它通常更有效,需要更少 代码。推送方法适用于数据收集 不能错过样本的应用程序和类似应用程序 测量。

    这不是你的问题,但我想知道你是否想要原始的 x、y、z 旋转或更有用的俯仰、滚动、偏航。对于以后使用startDeviceMotionUpdatesToQueue:withHandler: 而不是startGyroUpdatesToQueue:withHandler:

    【讨论】:

      【解决方案2】:

      编辑:请参阅 Tommy 对此答案的评论。我对委托模式的假设是错误的。

      我对@9​​87654321@不是特别熟悉,但从命名来看,这是我的猜测:

      • startGyroUpdates
        通过在主线程上调用委托方法来提供陀螺仪更新。
      • startGyroUpdatesToQueue:withHandler:
        通过调用给定队列上的处理程序块来提供陀螺仪更新。

      第一种是使用委托的预块样式,第二种是基于 GCD 的块化版本。

      【讨论】:

      • CMMotionManager 是在 iOS 4 中引入的,因此采取了稍微激进的步骤,即没有任何委托方法——您要么提供块,要么轮询。所以startGyroUpdates 适合那些想要经常检查状态的人,而不是那些想要接收实时更新的人。因此,这也是一个线索,表明 Apple 可能会将代表视为一个传统想法。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多