1

この標準コードをアプリで何度も使用して、VC をナビゲーションにプッシュします。コントローラ。

 [self.navigationController pushViewController:detailController animated:YES];

しかし、時々それらは動作を停止します-View Controllerは正しくプッシュされますが、アニメーションはありません(「animated:NO」を使用するのと同じように)、理由がわかりません。

何を観察または試すかについて何か提案はありますか?

4

1 に答える 1

0

...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 を使用してラップすることです)

于 2012-04-13T17:04:40.230 に答える