在主屏幕上,我有一系列居中对齐的按钮:新游戏,玩法,继续游戏。
单击后,我想对按钮进行动画处理以线性地横向移出屏幕。其中一个按钮(其余非常相似)具有以下限制(使用自动布局):
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)
有关如何使按钮动画以使其横向移出屏幕的任何建议,深表感谢!
谢谢
答案 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),就可以了。