第一次动画是出问题

问题描述:

我进/出使用动画视图gradientView如下:第一次动画是出问题

func hideOrShowGradientView(hide: Bool) { 
    UIView.animate(withDuration: 0.4, animations: { 
     self.gradientView.isHidden = hide 
    }) 
} 

这种运作良好,但在第一次,没有动画。它刚刚出现。在第二次和第三次它奇妙地工作。我试过在主线程上调用动画块,但没有运气。为什么这个动画第一次也是唯一一次没有发生?我应该使用另一种动画方法吗?

+3

你在哪里调用它?例如,如果第一个在'viewDidLoad'中,那么这个过程还为时过早。 (在回答你的主线程评论时,所有UI更新总是必须在主线程上发生。) – Rob

我在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()两次,动画块,强制重绘上的观点和它的子视图前一次,它完成了在视图中的任何未决的动画,而无需等待下一个更新周期,并在动画块内第二次调用它,以确保动画更改将立即应用。