3

新しいビューが画面にプッシュされたときのデフォルト以外のアニメーションを実装しました (以下のコードを参照)。何らかの理由で、このコードを実装すると、UIActivityIndi​​catorViews が機能しなくなりました。それらは画面に表示されますが、isAnimating が true の場合でもアニメーション化されません。CATransitionを変更したことが原因だと思いますが、UIActivityIndi​​catorViewで修正する方法がわかりません。

プッシュのデフォルト アニメーションを変更する

CATransition* fade = [CATransition animation];
fade.duration = 1.0;
fade.type = kCATransitionFade;
fade.subtype = kCATransitionFromTop;

[self.navigationController.view.layer 
addAnimation:fade forKey:kCATransition];

後でviewDidLoadでアニメーションを開始します

[spinner startAnimating];

ただし、スピナーは表示され、アニメーション化されません。何らかの理由で、私がアニメーション化した最初のスピナーが、その後は何もしません。

4

2 に答える 2

3

UINavigationController のサブクラス内で CATransition を使用して、View Controller をプッシュまたはポップするときにカスタム アニメーションを使用すると、この問題が発生しました。

この UINavigationController のサブクラスのメソッド内に、次のコードがありました。

- (void)addCustomTransition
{
    CATransition* transition = [CATransition animation];
    transition.duration = kAnimationDuration;
    transition.timingFunction =
    [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
    transition.type = kCATransitionFade;
    [self.view.layer addAnimation:transition forKey:nil];
}

ただし、プッシュ/ポップされたviewControllerのビューのレイヤーにも同じアニメーションを追加する必要があることが後でわかりました。

- (void)addCustomTransitionToViewController:(UIViewController *)viewController
{
    CATransition* transition = [CATransition animation];
    transition.duration = kAnimationDuration;
    transition.timingFunction =
    [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
    transition.type = kCATransitionFade;
    [self.view.layer addAnimation:transition forKey:nil];
    [viewController.view.layer addAnimation:transition forKey:nil]; // this is what was missing
}

このプッシュ/ポップされたビュー コントローラーのビューは、適切にアニメーション化されていない UIActivityIndi​​catorView を持つビューです。

お役に立てれば!

于 2013-07-29T20:36:13.703 に答える
-1

期間を 1.0 から 0.3 以下に変更する
だけです。テスト済みで動作しています。

于 2011-12-21T11:44:29.927 に答える