我会简短而详细地为您服务。 到目前为止我所取得的成就:
1)我为所需的约束创建了一个出口(中心X对齐)。我不知道这是否重要,但我改变了我的需求乘数(3:1)
2)动画他的常量
UIView.animateWithDuration(0.5, animations: { () -> Void in
self.btn_option_layout.constant = self.nan_view.center.x //Get center x value
self.nan_view.layoutIfNeeded() // Parent View
})
问题:
对象的来源位置:
而不是将视图设置为中心X的动画,如下所示:
由于某种原因它向左边动画,这就是结果:
我希望我很清楚。谢谢你的时间。
计算约束常数以使其在X上居中的正确方法是什么?
答案 0 :(得分:3)
你想要做的是完全正确的。您有一个约束将一个视图的中心固定到另一个视图的中心。如果该约束的乘数为1,则视图将位于另一视图的中心。
但是你的乘数不是1.而且,正如你正确观察到的那样,你不能改变现有约束的乘数 - 它是只读的。
但是,没问题。只需用不同的约束替换整个约束,与第一个约束相同,只是它的乘数是 1.现在动画布局!一个鲜为人知的事实是,您可以为约束中的这种变化设置动画。
这是实际代码:
let con2 = NSLayoutConstraint(item: self.con.firstItem, attribute: self.con.firstAttribute, relatedBy: self.con.relation, toItem: self.con.secondItem, attribute: self.con.secondAttribute, multiplier: 1, constant: 0)
NSLayoutConstraint.deactivateConstraints([self.con])
NSLayoutConstraint.activateConstraints([con2])
UIView.animateWithDuration(1, animations: {self.view.layoutIfNeeded()})
这是一个循环gif,向中心显示结果动画:
答案 1 :(得分:1)
解决。 尽管@matt很好的答案(和工作)。我的问题的主要目的是处理约束常数,以便将其集中在X上。 通过可能显示我的公式:
**a1 = m*a2 + c**
我潜入水中。我理解了几点:
最终我需要第二个属性(a2 - button.center.x
)将在第一个属性(a1 - self.view.center.x
)的相同位置。
所以a1 = a2 = self.view.center.x
我的乘数等于3(m - 乘数)。而C ..我们正在寻找它:)所以让我们把它放在:
a1 = m*a2 + c
c = a1 - m* a2
c = self.view.center.x - 3 * self.view.center.x
c = -2 * self.view.center.x
代码:
UIView.animateWithDuration(0.5, animations: { () -> Void in
self.btn_option_layout.constant = -2 * self.nan_view.center.x
self.nan_view.layoutIfNeeded()
})
将其反转回原点:
代码:
UIView.animateWithDuration(0.5, animations: { () -> Void
self.btn_option_layout.constant = 0
self.nan_view.layoutIfNeeded()
})
希望有所帮助。和亚光感谢指示!