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

UIView动画调用两次,完成后的布尔在完全完成之前设置为true

周苑博
2023-03-14

由于网络问题,我可能会调用UIView动画函数两次。不知何故,这似乎会搞乱您在完成块中获得的完成布尔值。

在动画期间,我将UIView移出屏幕。在动画结束时,它应该将我正在制作动画的帧设置为隐藏。我注意到完成块中完成的BOOL总是设置为YES。因此,当我第二次调用动画时,在对动画的第一次调用完成之前,它将设置为BOOL完成,即使我希望它设置为NO,因为动画被对同一动画的新调用中断。

    [UIView animateWithDuration:animated ? VOTE_ANIMATION_DURATION : 0.0 delay:2 options:UIViewAnimationOptionCurveEaseOut animations:^{
    self.waitingView.frame = CGRectMake(self.waitingView.frame.origin.x, (-self.waitingView.frame.size.height) - WAITINGVIEW_SHADOW_HEIGHT, self.waitingView.frame.size.width, self.waitingView.frame.size.height);

}                completion:^(BOOL finished) {
    if (finished) {
        DDLogInfo(@"set VotingView Animation is finished");
        self.waitingView.hidden = YES;
    }
}];

我也尝试添加以下行,但没有帮助。

 [UIView setAnimationBeginsFromCurrentState:YES];

有线索吗?

共有1个答案

穆英飙
2023-03-14

好的,您可以在类中设置布尔“isAnimating”属性,并仅在该属性为FALSE时启动动画。

if (!self.isAnimating) {
    [UIView animateWithDuration:animated ? VOTE_ANIMATION_DURATION : 0.0 delay:2 options:UIViewAnimationOptionCurveEaseOut animations:^{
        self.isAnimating = YES;
        self.waitingView.frame = CGRectMake(self.waitingView.frame.origin.x, (-self.waitingView.frame.size.height) - WAITINGVIEW_SHADOW_HEIGHT, self.waitingView.frame.size.width, self.waitingView.frame.size.height);
    }              
    completion:^(BOOL finished) {
        if (finished) {
            DDLogInfo(@"set VotingView Animation is finished");
            self.waitingView.hidden = YES;
            self.isAnimating = NO;
        }
    }];
}

当然,只有在不需要同时播放两次动画的情况下,这才有效。

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

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

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

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

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

  • 错误:------崩溃开始 08-04 05:53:11.807 266 7-2667/com.example.kwei.minigame1 E/AndroidRuntime:致命异常:main process:com.example.kwei.minigame1,PID:2667 java.lang.nullpointerException:试图在com.example.kwei.minigam