0

正如我在上一篇文章中向我建议的那样,以下代码将来自加速度计的数据作为分配的“分钟”:CMAccelerometerData* data = [manager accelerometerData]; 执行,然后从该数据中提取在 x 轴上执行的加速度并将其值存储在 double (double x) 中:

 CMMotionManager* manager = [[CMMotionManager alloc] init];

 CMAccelerometerData* data = [manager accelerometerData];

 double x = [data acceleration].x;

假设存储的值为 0.03 并假设我想在 while 循环中使用它,如下所示:

while (x > 0)
{
    // do something
}

上面的循环显然会永远运行

但是,如果我改用以下代码会怎样:

CMMotionManager* manager = [[CMMotionManager alloc] init];

while([[manager accelerometerData] acceleration].x > 0) 
{
    // do something
}

我现在不会在每次循环时都将零与不同的值进行比较吗?(无论如何,这就是我在我的项目中要做的事情..)

有什么想法吗?

我问这个的原因如下:

我想在一段时间内检查来自 x 轴的值,而不是定期检查它们,所以我基本上想编写一个看起来像这样的循环:

if ([[manager accelerometerData] acceleration].x > 0 ) 
{
    // initialiseTimer
}

while ([[manager accelerometerData] acceleration].x > 0 ) 
{
    if( checkTimer >=250ms )
    {
        stopTimer;

        printOut("X-Axis acceleration  was greater than zero for at least 250ms");

        breakFromLoop;
     }
}

我知道我的第二个 if 块中的代码不是有效的 Objective-C ..这只是为了让您了解我的目标..

4

1 回答 1

0

这有一个简单的解决方案。

1)声明一个实例变量 x ,每次加速度计告诉你时你都会更新它。

2)将此 x 与循环中所需的任何值进行比较。

希望这可以帮助。

问候,

乔治

于 2012-07-07T01:12:17.557 回答