-(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");
}
}
}
}
1 に答える
これについて間違った方法で行っているようです。クロックを実行する代わりに、accelerometerUpdateInterval
探しているものに設定しstartAccelerometerUpdatesToQueue:withHandler:
、データを受信するために使用する必要があります。
Appleのドキュメントから:
指定した間隔でモーション更新を処理する
特定の間隔でモーション データを受信するために、アプリケーションは「開始」メソッドを呼び出します。このメソッドは、操作キュー (NSOperationQueue のインスタンス) と、これらの更新を処理するための特定のタイプのブロック ハンドラーを受け取ります。モーション データはブロック ハンドラに渡されます。更新の頻度は、「interval」プロパティの値によって決まります。
加速度計。accelerometerUpdateInterval プロパティを設定して更新間隔を指定します。startAccelerometerUpdatesToQueue:withHandler: メソッドを呼び出して、タイプ CMAccelerometerHandler のブロックを渡します。加速度計データは、CMAccelerometerData オブジェクトとしてブロックに渡されます。
すべての設定が完了したら、実行してみましょう。ブロックから完了通知を受け取ったら、受け取ったデータを見てください。