我正在使用Xcode快速制作应用程序,我遇到了一些按钮动画的麻烦。 这是我的情况:
我在屏幕中间有三个按钮,我还添加了一些约束。
我需要的是,当点击按钮时,它会到达屏幕顶部,就像第二张带动画的照片一样:
我试过这个:
UIView.animateWithDuration(1, delay: 0, options: [], animations: {
self.Button2.center.y = 18 + self.Button2.frame.height/2
}, completion: nil)
但是会发生的是屏幕底部出现的按钮滑动到第一张照片的位置。它不尊重我在动画中写的位置。这可能是由于这些限制吗?因为我是纵向和横向居中的。
你能帮助我让它发挥作用吗?
答案 0 :(得分:1)
当您使用自动布局和约束时,您永远不会对动画中的按钮框架进行更改,例如代码:您必须始终使用约束。
这是一个通用的例子:
myButtonCenterYConstraint.constant = 200.0
myButton.layoutIfNeeded()
UIView.animateWithDuration(Double(0.5), animations: {
myButtonCenterYConstraint.constant = 0
myButton.layoutIfNeeded()
})
因此,第一步是声明您想要更改为 IBOutlets 的按钮约束:
答案 1 :(得分:0)
首先获取按钮的中心y,然后重新定位按钮。
float centerY = self.Button2.center.y;
UIView.animateWithDuration(1, delay: 0, options: [], animations: {
self.Button2.center.y = centerY + 18 + self.Button2.frame.height/2
}, completion: nil)
答案 2 :(得分:0)
您必须先更改约束,然后更新动画中的UI。像这样的东西。
yourButton.yourOriginConstraint'sYCoordinate.constant = // Set this to what you want to change.
// yes, you should create an IBOutlet for constraint that you want to modify.
UIView.animateWithDuration(1.0, animations: {
self.view.layoutIfNeeded()
}, completion: nil)
另一种方法是不使用自动布局。
此处是reference