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

编辑:增加了一个全球,现在它的工作。 但我仍然有我的怀疑..请继续阅读:)

我想要在Y轴上获得加速,并在我的代码的不同部分使用它。 在这个例子中,我在while循环中使用它来进行testing。

我的代码正在工作,但我正确地使用UpdateToQueue …方法或是这种“非正统”的方式来实现我想要的?

我已经设置更新间隔在30毫秒,你认为这是一个“安全”的更新间隔? 我被告知,select一个时应该小心,因为现在或以后的硬件/ 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); } } 

可以这样使用。

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

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

苹果文档:

select运动事件更新间隔

当您使用Core Motion请求运动数据时,请指定更新间隔。 您应该select满足您应用程序需求的最大时间间隔。 时间间隔越大,传送到您的应用程序的事件越less,从而延长电池使用时间。

表4-1列出了一些常见的更新频率,并解释了在该频率下生成的数据可以做什么。 很less有应用需要每秒交付100次加速事件。

事件频率(Hz)用法

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

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

70-100适用于需要检测高频运动的应用程序。 例如,您可以使用此间隔来检测用户触碰设备或非常快速地晃动设备。

您可以将报告间隔设置为小至10毫秒(ms),这对应于100 Hz的更新速率,但大多数应用程序在较大间隔内运行足够。

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

来源: select运动事件更新间隔