iPhone:更改CATransition会导致UIActivityIndi​​catorView停止动画

时间:2011-12-21 10:55:32

标签: iphone uiactivityindicatorview catransition

我已经实现了一个非默认动画,用于将新视图推送到屏幕上(请参阅下面的代码)。出于某种原因,一旦我实现了这段代码,它就会导致我的UIActivityIndi​​catorViews停止工作。它们将在屏幕上显示,但即​​使它们的isAnimating为真,也不会显示动画。我认为这是因为我改变了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];

但是微调器会显示而不是动画。出于某种原因,第一个旋转器我有动画,但之后什么都没有。

2 个答案:

答案 0 :(得分:3)

在推送或弹出视图控制器时,在UINavigationController的子类中使用CATransition来获取自定义动画时,我遇到了这个问题。

在这个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];
}

但是,我后来发现你还必须在push / popped 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的视图。

希望这有帮助!

答案 1 :(得分:-1)

只需将持续时间从1.0更改为0.3或更少 只是我经过测试,它正在运作