2016-07-27 86 views
1

我想用我的视图执行基于交互式手势的动画,需要将屏幕中心的视图移动到屏幕的左上角。我似乎无法插入两个不同x/y约束的位置(只改变常量)之间插入,所以作为替代方案,我想也许我可以在故事板中布置视图,然后通过直接更改框架来制作动画。有没有一个好的方法来做到这一点,或者这是一个坏主意?我可以在故事板中使用自动布局来放置我的视图,然后禁用约束?

回答

1

你不需要删除他们!只要停用它们就足够了。

如果你看过文档,你应该知道UIViewconstraints属性返回它作为[NSLayoutConstraint]的约束条件。你只需要遍历这个数组并停用所有约束!

for constraint in someView.constraints { 
    constraint.active = false 
} 

或者使用forEach

someView.constraints.forEach { $0.active = false } 

停用的约束,而不是删除它们,你可以再次激活它们很容易,当你需要它的优势。

+0

这是forEach语句的工作原理吗? $ 0是什么意思? – GoldenJoe

+1

@GoldenJoe这是编写'for in'循环的另一种方式。看到我在'for in'循环中声明的变量'constraint'? 'forEach'闭包中的'$ 0'具有大致相同的含义。如果你觉得这对你来说太过于实用,那就坚持'for in'循环。 – Sweeper

+0

@GoldenJoe它适合你吗?如果确实如此,请考虑接受答案。 – Sweeper

0

如果我是你,我会选择动画约束。即使由于某种原因无法更改约束常数,仍然可以删除以前的约束并添加一个新的约束。 要做到这一点,您需要:

  1. 保持到要更改
  2. 从视图
  3. 设置新的限制去掉,将其添加到视图约束参考
  4. 保持这种新的约束
  5. 动画的参考用:

    UIView.animateWithDuration(0.5){ self.view.layoutIfNeeded () }

+0

不幸的是,这不会产生交互式动画。 – GoldenJoe

+0

为什么?你尝试过吗? – RomOne

+0

我不认为你理解这个问题。我正在制作一个随着用户在屏幕上下移动而进行的动画。这不是“按下按钮并观看动画”类型的动画。 – GoldenJoe

相关问题