5

编辑:添加了一个全局,现在它正在工作。但是我仍然有疑问..请继续阅读:)

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

2 回答 2

4

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

苹果文档:

选择运动事件更新间隔

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

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

事件频率 (Hz)

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

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

70–100 适用于需要检测高频运动的应用。例如,您可以使用此时间间隔来检测用户敲击设备或快速摇晃设备。

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

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

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

于 2016-08-10T11:11:13.687 回答
3

以这种方式使用是可以的。

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

于 2012-08-03T20:55:14.820 回答