0
-(void) play
{
    CMMotionManager *motionManager = [[CMMotionManager alloc] init];
    [motionManager startDeviceMotionUpdates];

    BOOL timeReached = NO;

    while(!self.stopButtonPressed)
    {
        if(motionManager.deviceMotion.userAcceleration.y >= ... && motionManager.deviceMotion.userAcceleration.y <= ...)
        {
             //start timer
        }
        while(motionManager.deviceMotion.userAcceleration.y >= ... && motionManager.deviceMotion.userAcceleration.y <= ... && !timeReached)
        {
            if(//check timer & if timer is >=300ms)
            {
              timeReached = YES;
              NSLog(@"acceleration on Y-axis stayed between ... & .. for at least 300ms");
            }
        }
    }
}
4

1 に答える 1

2

これについて間違った方法で行っているようです。クロックを実行する代わりに、accelerometerUpdateInterval探しているものに設定しstartAccelerometerUpdatesToQueue:withHandler:、データを受信するために使用する必要があります。

Appleのドキュメントから:

指定した間隔でモーション更新を処理する

特定の間隔でモーション データを受信するために、アプリケーションは「開始」メソッドを呼び出します。このメソッドは、操作キュー (NSOperationQueue のインスタンス) と、これらの更新を処理するための特定のタイプのブロック ハンドラーを受け取ります。モーション データはブロック ハンドラに渡されます。更新の頻度は、「interval」プロパティの値によって決まります。

加速度計。accelerometerUpdateInterval プロパティを設定して更新間隔を指定します。startAccelerometerUpdatesToQueue:withHandler: メソッドを呼び出して、タイプ CMAccelerometerHandler のブロックを渡します。加速度計データは、CMAccelerometerData オブジェクトとしてブロックに渡されます。

すべての設定が完了したら、実行してみましょう。ブロックから完了通知を受け取ったら、受け取ったデータを見てください。

于 2012-08-02T14:26:46.663 に答える