startDeviceMotionUpdatesToQueue的安全更新间隔:withHandler



EDIT:添加了一个全局,现在它可以工作了。但是我仍然心存疑虑。。请阅读:)

我想在需要的时候在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);
    }
}

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

苹果文档:

选择运动事件更新间隔

使用Core motion请求运动数据时,可以指定更新间隔。您应该选择满足应用程序需求的最大间隔。间隔越大,发送到应用程序的事件就越少,从而提高了电池寿命。

表4-1列出了一些常见的更新频率,并解释了您可以处理以该频率生成的数据。很少有应用程序需要加速事件每秒传递100次。

事件频率(Hz)使用

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

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

70–100适用于需要检测高频运动的应用程序。例如,您可以使用此间隔来检测用户是否快速击打设备或抖动设备。

您可以将报告间隔设置为10毫秒(ms),这对应于100 Hz的更新率,但大多数应用程序在较大的间隔下都能充分运行。

简而言之,正如Bogdan已经说过的:10Hz-100Hz

来源:选择运动事件更新间隔

这样使用是可以的。

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

相关内容

  • 没有找到相关文章

最新更新