0

アプリケーションでピッチ値とロール値を監視しています。1 秒以内に 5 度変化するかどうかを監視し、プロセスを実行したいと考えています。現在、私のコードは次のようになっています。

 CMAttitude *attitude;
CMDeviceMotion *motion = scoringManage.deviceMotion;
attitude = motion.attitude;
basePitch = degrees(attitude.pitch);
baseRoll = degrees(attitude.roll);

if((pitchfloat >= basePitch+5) || (pitchfloat <= basePitch-5)) {


}
if((rollfloat >= baseRoll+5) || (rollfloat <= baseRoll-5)) {

}

それは次のように呼び出されます。

yprTime = [NSTimer scheduledTimerWithTimeInterval:(1.0/1.0) target:self selector:@selector(yprscore) userInfo:nil repeats:YES];

このプロセスはタイマーと共に毎秒実行されますが、値が変更されると、そのループが何度も実行されます。

問題は、その 1 秒間に if ステートメントが 20 回も実行されることです。

4

1 に答える 1

1

値が変更されたときにのみ実行する場合は、BOOL を設定する必要があります。あなたのifピッチ> 5ステートメントのセットアップ内で、別のifがそのBOOLをチェックします

if((pitchfloat >= basePitch+5) || (pitchfloat <= basePitch-5)) {
 if (firstTimeBOOLCheckisTrue == NO) {

 firstTimeBOOLCheckisTrue = YES;

 [self doSomething];
    }
}


(void *)doSomething{

if (imReadytoCheckPitchAgain == YES){
firstTimeBOOLCheckisTrue = NO;

}
于 2013-06-24T14:23:26.480 に答える