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;
     }
}

2番目のif-blockのコードが有効なObjective-Cではないことを知っています。これは、私が何をしようとしているのかを理解するためだけのものです。

4

1 に答える 1

0

これには簡単な解決策があります。

1)加速度計から指示されるたびに更新するインスタンス変数xを宣言します。

2)このxを、ループで必要な値と比較します。

お役に立てれば。

よろしく、

ジョージ

于 2012-07-07T01:12:17.557 に答える