...animated:YES/NO を使用するたびに、Cocoa フレームワークはそれができるかできないかを判断し、多くの場合失敗します。マイケルが言ったように、あなたはメインスレッドにいないか、誰が何を知っているか. NSWindow のフルスクリーン アニメーション用の最新の Lion API を見ると、アニメーションのさまざまなデリゲートが詳細を提供していないことがわかります。だから私は、Apple がアニメーターに戻ってそのような機能を追加するとは思わない。
あなたの質問に答えるために、主に Core Animations を使用して独自のカスタム アニメーションを使用します。彼らは本当にそれほど悪くはありません。開始するには、次のように便宜上、カテゴリまたはクラス メソッドを作成できます。
+ (void) animateWithDuration:(NSTimeInterval)duration
animation:(void(^)())animationBlock
completion:(void(^)())completionBlock {
[NSAnimationContext runAnimationGroup:^( NSAnimationContext *context ) {
if ( duration > 0 ) [context setDuration:duration];
[context setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionDefault]];
if ( animationBlock ) animationBlock();
} completionHandler:^ {
if ( completionBlock ) completionBlock();
}];
}
その後、いくつかのアニメーションに同じように使用できます。そのようです...
[AnimationContext animateWithDuration:myDuration animation:^{
// You can use whatever animation you want here or even nest
CABasicAnimation *fade = /* opacity animation */;
[view.layer addAnimation:fade forKey:nil];
} completion:^{
// Do some completion here.
}];
1 つの注意点として、この方法でアニメーションをより細かく制御できます。
これがあなたが探しているものに答えることを願っています。
(非常に注意してください、私の例は Mac OS X 用です。iOS では、NSAnimationContext に相当するのは CATransaction を使用してラップすることです)