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

5 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);
    }
}
Run Code Online (Sandbox Code Playgroud)

ini*_*333 6

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

\n\n

苹果文档:

\n\n
\n

选择运动事件更新间隔

\n\n

当您使用 Core Motion 请求运动数据时,您可以指定更新间隔。您应该选择满足您的 app\xe2\x80\x99s 需求的最大间隔。间隔越大,传递到应用程序的事件就越少,从而延长电池寿命。

\n\n

表 4-1 列出了一些常见的更新频率,并说明了您可以对以该频率生成的数据执行哪些操作。很少有应用需要每秒传送 100 次加速事件。

\n\n

事件频率 (Hz) 使用情况

\n\n

10\xe2\x80\x9320\n 适用于确定设备\xe2\x80\x99s当前方向向量。

\n\n

30\xe2\x80\x9360\n 适用于使用加速度计进行实时用户输入的游戏和其他应用程序。

\n\n

70\xe2\x80\x93100\n 适合需要检测高频运动的应用。例如,您可以使用此间隔来检测用户快速击打或摇动设备。

\n\n

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

\n
\n\n

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

\n\n

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

\n


小智 3

这样使用就可以了。

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