2017-09-20 66 views
0

很简单的动画叫了两声动画完成块:的UIView与TRUE

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 
}); 

动画工作得很好。但是,完成块被调用两次。这也很好,我知道我需要检查布尔值来查看它是否真的完成。那么,不仅是完成块被调用两次,而且这两个时间都是TRUE。

我怎么知道动画是否实际完成?

+1

最可能的原因是,动画被触发两次,并因此完成了两次。在此代码的开头添加一个断点并让它记录一条消息,然后自动继续。 – theMikeSwan

+0

@theMikeSwan我一定很累。你是对的。你可以发布这个答案,所以我可以接受它 – az2902

回答

0

完成块只应在每次动画完成时调用一次。确保动画不被多次调用。

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

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

如果没有得到两次调用它可能是时间来提交雷达......