UIView 动画完成块用 TRUE 调用两次
UIView animate completion block called twice with 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
});
动画效果很好。但是,完成块被调用了两次。这也很好,我知道我需要检查布尔值以查看它是否真的完成了。好吧,不仅完成块被调用了两次,而且两次 done 都是 TRUE。
我怎么知道动画是否真的完成了?
完成块只应在每次动画完成时调用一次。确保动画不会被多次调用。
在您列出的代码的开头添加一个断点,编辑它以记录一些消息,例如 "animation starting" 并将其设置为在评估后继续。
如果您不止一次看到该消息,您可以将断点设置为每次都停止并查看调用堆栈以了解调用的来源。
如果它没有被调用两次,可能是时候提交雷达了……
非常简单的动画:
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。
我怎么知道动画是否真的完成了?
完成块只应在每次动画完成时调用一次。确保动画不会被多次调用。
在您列出的代码的开头添加一个断点,编辑它以记录一些消息,例如 "animation starting" 并将其设置为在评估后继续。
如果您不止一次看到该消息,您可以将断点设置为每次都停止并查看调用堆栈以了解调用的来源。
如果它没有被调用两次,可能是时候提交雷达了……