2009-07-03 14 views
5

これはおそらく簡単な質問ですが、私はそれを行う方法を理解できないようです。アニメーターが終了するのを待つ方法は?

[[window animator] setAlphaValue:0.0]; 
[window close]; 

これは、[ウィンドウを閉じる]なし正常に動作しますが、それが含まれている場合、ウィンドウは、アニメーションが終了する前に閉じているようだ(当然である:基本的に私がしたいすべてがそれを閉じる前に、ウィンドウをフェードです私が望むものではない)。同じことがorderOut :, performClose :,などに起こっているようです。これを避ける方法はありますか?

答えて

8
[[window animator] setAlphaValue:0.0]; 
[window performSelector:@selector(performClose:) withObject:self afterDelay:[[NSAnimationContext currentContext] duration]]; 
+0

、-delayありません。 – kperryua

+0

ありがとうございます。私はこれを使用して終了: \t [ウィンドウperformSelector: \t afterDelayゼロ:(クローズ) \t withObject @selector [NSAnimationContext currentContext]期間]。 – Michael

+0

D'oh!そうですね。私の悪いです。 :-) – kperryua

3

アニメータプロキシによってトリガされた暗黙のアニメーションは、ウォールタイムで実行されます。現在のNSAnimationContextから継続時間を取得し、その間隔を使用してクリーンアップ/ポストアニメーション操作を遅延させます。

3

これは古くからの質問ですが、これまでの回答は古くなっています。

このようなcompletionHanlerで特別NSAnimationContextのクラスメソッドを使用している終えたアニメーターのを待つための正しい方法:currentContextへのメッセージは-animationDurationをする必要があります

[NSAnimationContext runAnimationGroup:^(NSAnimationContext *context){ 
    // Start some animations here. 
    [[window animator] setAlphaValue:0.0]; 
} completionHandler:^{ 
    // This block will be invoked when all of the animations started above have completed or been cancelled. 
    NSLog(@"All done!"); 
}]; 
関連する問題