【发布时间】:2016-07-27 23:22:14
【问题描述】:
我想使用我的视图执行基于手势的交互式动画,这需要将位于屏幕中心的视图移动到屏幕的左上角。我似乎无法在两个不同 x/y 约束的位置之间进行插值(仅更改常量),因此作为替代方案,我想也许我可以在我的故事板中布置视图,然后通过直接更改框架为它们设置动画.有没有好的方法可以做到这一点,还是一个坏主意?
【问题讨论】:
标签: swift animation autolayout storyboard
我想使用我的视图执行基于手势的交互式动画,这需要将位于屏幕中心的视图移动到屏幕的左上角。我似乎无法在两个不同 x/y 约束的位置之间进行插值(仅更改常量),因此作为替代方案,我想也许我可以在我的故事板中布置视图,然后通过直接更改框架为它们设置动画.有没有好的方法可以做到这一点,还是一个坏主意?
【问题讨论】:
标签: swift animation autolayout storyboard
您不需要删除它们!只需停用它们就足够了。
如果您看过文档,您应该知道UIView 的constraints 属性返回它作为[NSLayoutConstraint] 具有的约束。您只需要遍历这个数组并停用所有约束!
for constraint in someView.constraints {
constraint.active = false
}
或者使用forEach:
someView.constraints.forEach { $0.active = false }
停用约束而不是删除它们的优点是您可以在需要时轻松地再次激活它们。
【讨论】:
for in 循环的另一种方式。看到我在for in 循环中声明的变量constraint 了吗? forEach 闭包中的 $0 含义大致相同。如果您觉得这对您来说太实用了,请坚持使用 for in 循环。
如果我是你,我会选择为约束设置动画。即使由于某种原因无法更改约束常数,您仍然可以删除先前的约束并添加新的约束。 为此,您需要:
动画:
UIView.animateWithDuration(0.5) { self.view.layoutIfNeeded() }
【讨论】: