动画 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()

            })

希望对您有所帮助。谢谢马特的指路!