如何为按钮设置动画以超出视野

时间:2018-12-27 19:02:04

标签: swift animation uibutton

在主屏幕上,我有一系列居中对齐的按钮:新游戏,玩法,继续游戏。

单击后,我想对按钮进行动画处理以线性地横向移出屏幕。其中一个按钮(其余非常相似)具有以下限制(使用自动布局):

Align Center X to: Safe Area
Align Center Y to: Safe Area, Multiplier 1.2
Proportional width 0.6 with Superview
300:50 Ratio: to Button

我以为以下代码可以提供所需的动画,但似乎不起作用:

 button.centerXAnchor.constraint(equalTo: self.view.centerXAnchor, constant: 1000)
            UIView.animate(withDuration: 1, delay: 1, usingSpringWithDamping: 4, initialSpringVelocity: 4, options: .curveEaseOut, animations: { self.view.layoutIfNeeded()}, completion: nil)

有关如何使按钮动画以使其横向移出屏幕的任何建议,深表感谢!

谢谢

2 个答案:

答案 0 :(得分:1)

简单地

Third Author

将创建另一个约束,并导致冲突,因此,当您创建原始centerX时,将其保存在类似var的

button.centerXAnchor.constraint(equalTo: self.view.centerXAnchor, constant: 1000)

然后使用其恒定值

var centerCon:NSLayoutConstraint! 
centerCon = button.centerXAnchor.constraint(equalTo: self.view.centerXAnchor, constant: 0) 
centerCon.isActive = true

答案 1 :(得分:0)

这就是我的方法。并没有所有多余的弹性参数,但也许会有所帮助:

amountToTranslateBy = self.view.bounds.width // assuming this is executed from inside ViewController

UIView.animate(withDuration: yourDuration, delay: yourDelay, options: .curveEaseOut, animations: {

                        for view in yourArrayOfViews {
                            view.center.x -= amountToTranslateBy
                        }

                    }, completion: nil)

您设置的约束不应受到此动画的影响,尤其是因为按钮的约束取决于其他(超级)视图,而不是相反。只要您记得在适当的时候使用相同的方法将视图移回其原始位置(+ = amountToTranslateBy),就可以了。