Ios 按钮动画不';我不能在swift中正常工作

Ios 按钮动画不';我不能在swift中正常工作,ios,iphone,xcode,swift,animation,Ios,Iphone,Xcode,Swift,Animation,我正在使用Xcode在swift中制作一个应用程序,我在一些按钮的动画方面遇到了问题。 我的情况如下: 我在屏幕中间有三个按钮,我也添加了一些约束。 我需要的是,当点击按钮时,它会到达屏幕顶部,如第二张带有动画的照片: 我试过这个: UIView.animateWithDuration(1, delay: 0, options: [], animations: { self.Button2.center.y = 18 + self.Button2.frame.height/2

我正在使用Xcode在swift中制作一个应用程序,我在一些按钮的动画方面遇到了问题。 我的情况如下:

我在屏幕中间有三个按钮,我也添加了一些约束。

我需要的是,当点击按钮时,它会到达屏幕顶部,如第二张带有动画的照片:

我试过这个:

UIView.animateWithDuration(1, delay: 0, options: [], animations: {
        self.Button2.center.y = 18 + self.Button2.frame.height/2

        }, completion: nil)
但实际情况是,按钮出现在屏幕底部,向上滑动到第一张照片的位置。它不尊重我在动画中写的位置。这是否可能是由于限制?因为我将它垂直和水平居中


你能帮我使它工作吗?

当你使用自动布局和约束时,你永远不会对动画中的按钮框进行更改,就像你的代码一样:你必须始终使用约束

这是一个通用示例:

myButtonCenterYConstraint.constant = 200.0
myButton.layoutIfNeeded()
UIView.animateWithDuration(Double(0.5), animations: {
        myButtonCenterYConstraint.constant = 0
        myButton.layoutIfNeeded()
})
因此,第一步是将要更改的按钮约束声明为IBOutlets


首先获取按钮的中心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)

必须先更改约束,然后在动画中更新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)
另一种方法是不使用自动布局


在这里,您可以尝试创建两点。1按钮当前所在的位置,第二个按钮应该放在哪里。然后简单地将第二帧指定给按钮的帧。实际上,在使用动画之前,我使用NSTimer进行了此操作,它调用了一个移动按钮的函数,并且工作正常,因此可能这不是约束约束的问题约束“强制”按钮的位置。如果在没有更改约束的情况下更改按钮位置,autolayout可以通过保持约束优先级来重新计算视图中的所有元素位置:您会发现自己面临不愉快和意外的结果。但是有没有办法设置屏幕的两个点并说“您必须从这里移动到那里”?因为我也在网上查过了,这个动画看起来你只能把你的按钮从屏幕的一侧移动到你可以选择的地方。使用“自动布局”时,可以在对象、视图中的所有图元和视图之间提供参照。你不能忽视它。因此,每个元素都有自己的约束,每个约束都有不同于其他约束的优先级。通过一些数学计算,你可以做你所需要的一切。请注意:您也可以尝试只更改帧或中心,可能看起来您可能很好,但您将收到错误约束值的警告,并且您的应用程序可能出现故障。