动画 auto-layout 约束常量 X 到父视图的中心
Animate auto-layout constraint constant X to the center of the parent view
我会为您简短而详细地说明。
到目前为止,我取得了成功:
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 上居中的正确方法是什么?
你想做的是完全正确的。您有一个约束将一个视图的中心固定到另一个视图的中心。如果该约束的乘数为 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,显示了生成的动画到中心:
已解决。
尽管@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()
})
希望对您有所帮助。谢谢马特的指路!
我会为您简短而详细地说明。 到目前为止,我取得了成功:
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 上居中的正确方法是什么?
你想做的是完全正确的。您有一个约束将一个视图的中心固定到另一个视图的中心。如果该约束的乘数为 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,显示了生成的动画到中心:
已解决。 尽管@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()
})
希望对您有所帮助。谢谢马特的指路!