我正在使用以下内容为gradientView
输入/输出设置动画:
func hideOrShowGradientView(hide: Bool) {
UIView.animate(withDuration: 0.4, animations: {
self.gradientView.isHidden = hide
})
}
这很有效,但是第一次没有动画。它出现了。在第二次和第三次它非常有效。我试过在主线程上调用animate块,但没有运气。为什么这个动画不能在第一次也是第一次出现?我应该使用其他动画方法吗?
答案 0 :(得分:0)
您是否尝试过调用self.view.layoutIfNeeded()
。它会强制视图及其子视图立即完成其中任何待处理的动画,这可能会干扰您的动画。您可以像这样使用它:
func hideOrShowGradientView(hide: Bool) {
self.view.layoutIfNeeded()
UIView.animate(withDuration: 0.4, animations: {
self.gradientView.isHidden = hide
self.view.layoutIfNeeded()
})
}
Apple建议两次调用layoutIfNeeded()
,一次在动画块之前强制重绘视图及其子视图,并在视图上完成任何待处理的动画而不等待下一个更新周期,并将其称为第二次在动画块内,以确保动画更改将立即应用。
答案 1 :(得分:0)
我在init方法的主线程上进行了太多操作,只在第一次显示视图时才调用它。将不必要的初始化移动到视图中确实出现了