3

当新视图被推送到屏幕上时,我已经实现了一个非默认动画(参见下面的代码)。由于某种原因,一旦我实现了这段代码,它就会导致我的 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];

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

4

2 回答 2

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];
}

但是,我后来发现您还必须将相同的动画添加到推送/弹出的 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 回答