当前位置: 首页 > 知识库问答 >
问题:

为什么[UIView动画]的完成处理程序调用顺序错误?

夏侯浩气
2023-03-14

在我的项目中有一个ViewController,它包含一些子视图(例如按钮)。它显示/隐藏这些按钮,总是带有动画。

它有一个这样的界面:

@interface MyViewController: UIViewController

- (void)setMyButtonsVisible:(BOOL)visible;

@end

实现如下所示:

- (void)setMyButtonsVisible:(BOOL)visible
{
    if( visible )
    {
        // "show"
        _btn1.hidden = NO;
        _btn2.hidden = NO;
        [UIView animateWithDuration:0.2 animations:^{
            _btn1.alpha = 1.0;
            _btn2.alpha = 1.0;
        }];
    }
    else
    {
        // "hide"
        [UIView animateWithDuration:0.2 animations:^{
            _btn1.alpha = 0.0;
            _btn2.alpha = 0.0;
        } completion:^(BOOL finished) {
            _btn1.hidden = YES;
            _btn2.hidden = YES;
        }];
    }
}

[_myVCsetMyButtonsViable: NO]被调用时,然后经过一段时间(

我尝试将“隐藏”持续时间更改为0.1,但没有帮助-在“隐藏(0.1)”“显示(0.2)”调用之后,“隐藏”回调在“显示”回调之后调用,我的按钮不可见。

我添加了一个快速修复方法,缓存visible参数,如果状态应该是,则签入“hide”完成处理程序!可见。

我的问题是:

  1. 如果动画重叠,为什么第一个动画完成处理程序称为最后一个

共有1个答案

习和通
2023-03-14

完成时检查完成标志:

if (finished) {
 _btn1.hidden = YES;
 _btn2.hidden = YES; 
}
 类似资料:
  • 我在我正在开发的应用程序中发现了一个奇怪的错误。在我进入细节之前,我将陈述我的问题 1-为什么不能调用UIView动画完成块 2-为什么在显示模式视图后会调用UIView动画完成块? 我有一系列UIView动画,它们在视图控制器出现后开始。他们有完成块。绝大多数情况下,动画完成块都会被调用。但每隔一段时间,应用程序就会进入一种状态,完成块不会被调用。 此外,当我从当前视图控制器模态地呈现一个新的视

  • 我正在制作一个显示化学反应动画的应用程序。每个原子都是一个SCNSphere,并用SCNActions动画。我试图使用runAction()中的完成处理程序在当前操作完成后调用下一个动画,因为每个原子必须进行许多不同的运动。 这只是我为简化过程而编写的一些测试代码,实际代码将在对象数组中循环。 语句工作正常,只有在操作完成后才会调用它,但是新的SCNAction不会触发。我是否遗漏了什么来启动下一

  • 我有一个用于交互式过渡的自定义动画师。还有一个,根据过渡进度设置为。效果的动画代码如下: 我通过调用它,当从它到第一个的转换开始时,它在第二个上调用。 然而,我这里有一个问题。在动画结束之前调用完成块。当我第一次运行转换(没有取消它)时,它工作得很好,但在随后的运行过程中,它就不工作了。 我也曾尝试将动画添加到我的动画师中,但也没有成功。 此外,当我取消转换时,在实际动画结束之前调用完成块(在这种

  • 每当此动画结束时,我都会尝试调用一个方法,但在某些情况下,例如,当用户离开应用程序时,它的完成块永远不会被调用。此外,当VC与UIView动画同时出现时,完成块永远不会被调用。 即使动画以某种方式中断,我应该如何确保调用回调?我是否应该根本不使用UIView动画完成块,而是使用其他内容?请开导我。。!

  • 非常简单的动画: 动画工作得很好。但是,完成块被调用了两次。这也很好,我知道我需要检查布尔值,看看它是否真的完成了。嗯,不仅完成块被调用了两次,而且两次都完成了。 我怎么知道动画是否真的完成了?

  • 我正在为数组中的每个UIView设置动画,我想知道所有动画何时完成。例如:我用一个简单的缩放动画在ViewController上显示10个UIView,每个UIView都有一个小延迟。在所有10个动画完成后,我想在完成块中再做一个动画。 我如何知道所有动画何时完成?