第一次动画是出问题
问题描述:
我进/出使用动画视图gradientView
如下:第一次动画是出问题
func hideOrShowGradientView(hide: Bool) {
UIView.animate(withDuration: 0.4, animations: {
self.gradientView.isHidden = hide
})
}
这种运作良好,但在第一次,没有动画。它刚刚出现。在第二次和第三次它奇妙地工作。我试过在主线程上调用动画块,但没有运气。为什么这个动画第一次也是唯一一次没有发生?我应该使用另一种动画方法吗?
答
我在init方法中的主线程太多了,只有在第一次显示视图时才调用它。移动不必要的初始化到视图中确实出现
答
您是否试过拨打self.view.layoutIfNeeded()
。它强制视图和子视图立即完成它的任何未决动画,这可能会干扰您的动画。您可以使用它像这样:
func hideOrShowGradientView(hide: Bool) {
self.view.layoutIfNeeded()
UIView.animate(withDuration: 0.4, animations: {
self.gradientView.isHidden = hide
self.view.layoutIfNeeded()
})
}
苹果建议呼吁layoutIfNeeded()
两次,动画块,强制重绘上的观点和它的子视图前一次,它完成了在视图中的任何未决的动画,而无需等待下一个更新周期,并在动画块内第二次调用它,以确保动画更改将立即应用。
你在哪里调用它?例如,如果第一个在'viewDidLoad'中,那么这个过程还为时过早。 (在回答你的主线程评论时,所有UI更新总是必须在主线程上发生。) – Rob