动画NSLayoutConstraint&在单独的块中同时查看

时间:2016-08-22 18:21:28

标签: ios swift animation uiview nslayoutconstraint

我有两个相对简单的动画。一个是动画UIButton的顶部约束,以便它向上滑动。另一种是在UIView上设置背景颜色的动画。

self.buttonAnimationConstant.constant = 0
self.view.layoutIfNeeded() // ensure the constraint is at 0
self.buttonAnimationConstraint.constant = 100
UIView.animateWithDuration(0.25, delay: 0.0) {
    self.view.layoutIfNeeded()
}

和我的色彩动画:

UIView.animateWithDuration(0.25, delay: 0.0) {
    self.colorView.backgroundColor = UIColor.purpleColor()
}

如果我尝试同时执行它们,那么该按钮将动画显示但它取消了颜色动画,可能是因为view.layoutIfNeeded。请注意,这两个动画位于不同的位置,因此它们不能连接到一个块中(一个位于视图控制器级别,另一个嵌入在自定义视图中,但都位于同一个视图控制器中)。如何为约束和视图属性设置动画,使其不会取消另一个?

基本上问题是如何设置约束和位于同一视图层次结构中的视图的动画?

1 个答案:

答案 0 :(得分:2)

动画块不会相互抵消。这里的问题是这一行:

self.view.layoutIfNeeded() // ensure the constraint is at 0

在动画块之外调用layoutIfNeeded将取消动画(因为它们为您设置动画的值设置了新值),并且您无法阻止它。你可以做的是确保在执行动画时没有在动画块之外调用layoutIfNeeded。当然,如果视图不在同一视图层次结构中,则不会发生这种情况。