startDeviceMotionUpdatesToQueue的安全更新间隔:withHandler:?

时间:2012-08-03 14:37:46

标签: iphone objective-c ios core-motion cmmotionmanager

编辑:添加了一个全局,现在它正在运行。但我仍有疑虑..请继续阅读:)

我想在需要的时候在Y轴上进行加速,并在代码的不同部分使用它。在这个例子中,我在while循环中使用它来进行测试..

我的代码正在运行,但我是否正确使用UpdateToQueue ...方法,还是这种“非正统”的方式来实现我的目标?

我将更新间隔设置为30毫秒,您认为这是一个“安全”的更新间隔吗?有人告诉我,在选择一个时我应该小心,因为当前或以后的硬件/ iOS更新可能无法跟上这样的间隔,这是真的吗?

double myAcceleration; // a global..

-(void) play // my "main" method..
{
    CMMotionManager *motionManager = [[CMMotionManager alloc] init];
    motionManager.deviceMotionUpdateInterval = 0.03; // update every 30ms
    [motionManager startDeviceMotionUpdatesToQueue:[NSOperationQueue mainQueue]  
                                       withHandler:^(CMDeviceMotion *motion, NSError *error) 
                                       {
                                           myAcceleration = motion.userAcceleration.y;
                                       }
    ];

    while(!self.stopButtonPressed)
    {
        NSLog(@"Y-Axis acceleration is %f", myAcceleration);
    }
}

2 个答案:

答案 0 :(得分:3)

可以这样使用。

关于时间间隔:当前最大更新限制为100Hz(每秒100次,一次加速度计更新为0.01秒),最小值为10Hz(AFAIK)。如果您在此类范围内设置了时间间隔,那么苹果小工具的当前版本和下一版本肯定会受到支持。但你不能依赖默认的时间间隔,并祈祷它在任何地方都是一样的,因为苹果可能改变最小和最大(例如一些新的IC芯片将支持500Hz刷新率)范围,因此默认也会改变。 / p>

答案 1 :(得分:3)

最后。我找到了自己问题的答案:)

Apple docs:

  

选择动作事件更新间隔

     

使用Core Motion请求运动数据时,指定更新间隔。您应该选择满足应用需求的最大间隔。间隔越大,向您的应用传递的事件就越少,从而延长了电池寿命。

     

表4-1列出了一些常见的更新频率并说明了您的情况   可以处理在该频率下生成的数据。很少有应用需要   加速事件每秒发送100次。

     

事件频率(Hz)用法

     

10-20   适用于确定设备的当前方向向量。

     

30-60   适用于使用加速计进行实时用户输入的游戏和其他应用程序。

     

70-100   适用于需要检测高频运动的应用。例如,您可以使用此间隔来检测用户是否正在快速摇动设备或摇动设备。

     

您可以将报告间隔设置为10毫秒(ms),这相当于100 Hz的更新速率,但大多数应用程序运行时间间隔较长。

简而言之,正如波格丹所说:10Hz-100Hz

来源:Choosing a Motion Event Update Interval