调用 UIView animateWithDuration 后,关键帧动画需要很长时间才能启动

Posted

技术标签:

【中文标题】调用 UIView animateWithDuration 后,关键帧动画需要很长时间才能启动【英文标题】:Keyframe animation takes long time to start after UIView animateWithDuration is called 【发布时间】:2015-03-12 09:09:50 【问题描述】:

我正在使用以下方法链接动画:

[UIView animateWithDuration:0.3 delay:0
                    options:UIViewAnimationOptionCurveEaseOut
                 animations:^()
                     // Animations here
                 
                 completion:^(BOOL finished) 
                     if (finished) 
                         // Chained animation
                     
                 ];

每当我呈现和关闭视图控制器时,这些动画就会播放,称为视图控制器 1。

当我加载第二个视图控制器 View Controller 2 时,我会在 mainWindow 顶部显示一个插页式加载视图,其中 mainWindow 是

UIWindow *mainWindow = [[[UIApplication sharedApplication] delegate] window];

此插页式加载视图显示了一个使用关键帧动画制作动画的微调器。

我遇到的问题是,如果我多次加载 View Controller 1(比如 5 次以上),然后加载 View Controller 2,微调器动画开始需要很长时间才能启动。在多次进入 View Controller 1,然后进入 View Controller 2 之后,View Controller 2 的动画需要很长时间才能开始,以至于在微调器有机会开始动画之前,加载视图被移除。

有谁知道导致这种行为的原因是什么?离开 View Controller 1 时 UIView 动画没有被正确移除是否与此有关?

【问题讨论】:

可以尝试在viewDidAppear中加入这个动画代码试试吗? 你解决了吗?我似乎也有同样的问题。 【参考方案1】:

调用 main_queue 中的方法,解决了我的问题。

dispatch_async(dispatch_get_main_queue(), ^

    [UIView animateWithDuration:0.3 delay:0
                options:UIViewAnimationOptionCurveEaseOut
             animations:^()
                 // Animations here
             
             completion:^(BOOL finished) 
                 if (finished) 
                     // Chained animation
                 
             ];
);

【讨论】:

以上是关于调用 UIView animateWithDuration 后,关键帧动画需要很长时间才能启动的主要内容,如果未能解决你的问题,请参考以下文章

UIView touchesCancelled 未调用

UIView、UIScrollView 和 UITextFields 问题调用方法

在 UIView 中调用 presentModalView 控制器

UIView 在后台调用 drawRect

iPhone UIView touchesMoved: withEvent: 不会在 UIView 上使用手势识别器调用

如何在 UIView 类中调用 presentViewController?