【问题标题】:UIView animate completion block called twice with TRUEUIView 动画完成块用 TRUE 调用了两次
【发布时间】:2017-09-20 18:09:41
【问题描述】:

非常简单的动画:

UIView.animate(withDuration: 3, delay: 0, options: .curveLinear, animations: {
  self.imageViewA.snp.remakeConstraints({ (make) in
    make.bottom.equalTo(50);
  })
  self.layoutIfNeeded();
}, completion: {(done) in
  print(done); //called twice, both times as true
});

动画效果很好。但是,完成块被调用了两次。这也很好,我知道我需要检查布尔值以查看它是否真的完成了。嗯,不仅完成块被调用了两次,而且两次,done 都是 TRUE。

我怎么知道动画是否真的完成了?

【问题讨论】:

  • 最可能的原因是动画被触发了两次,因此完成了两次。在这段代码的开头添加一个断点并让它记录一条消息,然后自动继续。
  • @theMikeSwan 我一定累了。你是对的。您可以将其发布为答案,以便我接受吗

标签: ios swift uiviewanimation


【解决方案1】:

每次动画完成时,完成块应该只被调用一次。确保动画没有被多次调用。

在您列出的代码的开头添加一个断点,对其进行编辑以记录一些消息,例如“动画开始”,并将其设置为在评估后继续。

如果您多次看到该消息,则可以将断点设置为每次都停止并查看调用堆栈以查看调用来自何处。

如果它没有被调用两次,可能是时候提交雷达了……

【讨论】:

    猜你喜欢
    • 2014-09-16
    • 2018-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-11
    相关资源
    最近更新 更多