2009-06-19 10 views
1

を押したときに、のボタンを押すと、私のインターフェイスの他の部分で一連の変更が行われます。例えばこれはNSTimerの仕事ですか? Looping interface changes

1秒、一部のテキストが青に変わりますため、その後、UImageViewは、などなど... 2秒のためにそのイメージが変わります...

変化のこのシリーズは、同じ手順を通してループし続けますボタンが押されている間は長くなります。

以前はNSTimerを使ったことがありませんでしたが、これは方法ですか?

答えて

3

NSTimerを使用する必要はありません。もう一度開始するまで、performSelector:withObject:afterDelay:シーケンシングを一方のメソッドから次のメソッドに単純に使用できます。ボタンが押されているときにプロセスを開始し、ボタンが離されたときにcancelPreviousPerformRequestsWithTarget:selector:object:を呼び出します。あなたが現在実行中の「performSelector」セレクタを覚えていると、それだけで1をキャンセルし、それを覚えるそのほとんど価値がある可能性があり

- (void) step1 
{ 
    // turn blue 
    [self performSelector:@selector(step2) withObject:nil afterDelay:1.0]; 
} 

- (void) step2 
{ 
    // change image 
    [self performSelector:@selector(step3) withObject:nil afterDelay:2.0]; 
} 

- (void) step3 
{ 
    // turn red 
    [self performSelector:@selector(step1) withObject:nil afterDelay:3.0]; 
} 

- (void) stopSteps 
{ 
    [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(step1) object:nil]; 
    [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(step2) object:nil]; 
    [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(step3) object:nil]; 
} 

:のようなもの。

また、NSTimerとステートマシンを使用することもできますが、あなたの説明では、上記の方が簡単かもしれません。シーケンスがどれほど一貫しているか、シーケンスを一連のステップ上記のように、またはデータのセット(その場合は、NSTimerまたはperformSelectorのいずれかの状態マシンを使用します。withObject:afterDelay :)

+0

ありがとうございます。将来の参照のために、私は配列の中に遅延時間を格納しています。このようにいくつかのオブジェクトを作成します:NSNumber * one = [NSNumber numberWithDouble:0.30]; NSNumber * two = [NSNumber numberWithDouble:0.50]; ..など配列の各オブジェクトをNSTimerIntervalのようにdoubleに変換しなければなりませんでした。double dubNum = [[array objectAtIndex:0] doubleValue]; NSTimeInterval dubNumTimer = dubNum; ... afterDelay:dubNumTimer – cannyboy

+0

^NSTimerInterval = then NSTimerInterval – cannyboy