【问题标题】:iPhone: changing CATransition causes UIActivityIndicatorView to stop animatingiPhone:更改 CATransition 会导致 UIActivityIndi​​catorView 停止动画
【发布时间】:2013-07-30 04:36:13
【问题描述】:

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

但微调器会显示而不是动画。出于某种原因,我制作了第一个微调器动画,但之后就没有了。

【问题讨论】:

    标签: iphone uiactivityindicatorview catransition


    【解决方案1】:

    我在 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 的视图。

    希望这会有所帮助!

    【讨论】:

    • 我只是意识到您的问题已经存在将近 2 年了。我必须在 iOS 6 中添加此功能。
    【解决方案2】:

    只需将您的持续时间从 1.0 更改为 0.3 或更少
    只是我已经过测试并且可以正常工作

    【讨论】:

    • 感谢我有自己的进度实现,我正在使用它作为解决方法,但仍然想知道为什么首先会导致问题。
    • 是的,我也在我的项目中尝试了你的实现,我遇到了同样的问题。
    • 我刚刚实现了自己的类来解决这个问题,类似于你的第一种方法,编辑后的修复似乎不太干净。我的意思是,如果我仍然想要 1.0 的持续时间,为什么它不能工作?
    • 实际上ios一次使用了单一的动画样式。 CATransition 和活动指示器都包含过渡效果,因此第一个效果被应用,第二个被跳过。
    • 哦,太棒了,我就是这么想的,但不确定。您是否有任何机会链接到 Apple 描述或声明其操作系统这一方面的地方?这将完美地回答我之前的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多