私の iPhone アプリでは、単一のメソッドで実行される一連のコードがあります。メソッドの最後に、遅延が必要な行がいくつかあるので、それらは前に行った後にのみ実行されます。これは、アニメーションが進行中であるためです。アニメーションが完了したら、このコードを実行する必要があります。
NSTimer を使用できることはわかっていますが、もう少しエレガントでクリーンなものを試してみたいと思っていました。
私の iPhone アプリでは、単一のメソッドで実行される一連のコードがあります。メソッドの最後に、遅延が必要な行がいくつかあるので、それらは前に行った後にのみ実行されます。これは、アニメーションが進行中であるためです。アニメーションが完了したら、このコードを実行する必要があります。
NSTimer を使用できることはわかっていますが、もう少しエレガントでクリーンなものを試してみたいと思っていました。
アニメーションが終わった後でも遅延が必要な場合は、次のように 2 番目のプロセスを呼び出すことができます。
[self performSelector:<#(SEL)#> withObject:<#(id)#> afterDelay:<#(NSTimeInterval)#>]
最初のプロセスに使用できます:
– performSelector:onThread:withObject:waitUntilDone:
これにより、プロセスが完了するまでスレッドがブロックされます。
この後、次のステートメントの実行が開始されます。
これを行う標準の (そして非常に便利な) iOS の方法は、コールバック ブロックです。簡単な UI アニメーションを考えてみましょう。
[UIView animateWithDuration:1
animations:^{
myView.alpha = 1; // fade-in myView
}
completion:^(BOOL finished){
// this code gets called when the animations block above is finished
}];
完了ブロックをパラメーターとして受け取る独自のメソッドを実装し、実行の最後に呼び出すことができます。これは、それを始めるためのApple のブロック チュートリアルです。