我使用以下方法对 View gradientView
输入/输出进行动画处理:
func hideOrShowGradientView(hide: Bool) {
UIView.animate(withDuration: 0.4, animations: {
self.gradientView.isHidden = hide
})
}
效果很好,但第一次没有动画。它只是出现。第二次和第三次效果非常好。我尝试在主线程上调用动画 block ,但没有成功。为什么这个动画第一次且唯一一次没有出现?我应该使用另一种动画方法吗?
最佳答案
您是否尝试过调用self.view.layoutIfNeeded()
。它强制 View 及其 subview 立即完成任何待处理的动画,这可能会干扰您的动画。您可以像这样使用它:
func hideOrShowGradientView(hide: Bool) {
self.view.layoutIfNeeded()
UIView.animate(withDuration: 0.4, animations: {
self.gradientView.isHidden = hide
self.view.layoutIfNeeded()
})
}
Apple 建议调用 layoutIfNeeded()
两次,一次在动画 block 之前,这会强制在 View 及其 subview 上重绘,并且它会完成 View 上所有待处理的动画,而无需等待下一个更新周期,并在动画 block 内第二次调用它,以确保动画更改将立即应用。
关于ios - 第一次动画有问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46208407/