我真的无法弄清楚我的代码有什么问题。让我详细解释一下我的目标是什么:
UIView
中有两个UIViewController
。他们被称为“redSquare
”和“greenSquare
”。UIViewController
时,我想为redSquare
设置动画,以便在Y轴上移动,直到它到达greenSquare
的上边界。这是我设置xCode项目的方式:
我得到的行为完全相反,我真的不明白为什么以及发生了什么:
对此有何提示或解释?
答案 0 :(得分:2)
好。部分问题在于您正在调整中心Y ...这意味着您正试图通过动画来破坏约束。
问题的另一部分是你在viewDidLoad
进行动画制作,完全在viewWillAppear
和viewDidAppear
被调用之前运行。
对于我自己的动画,我通常会为约束设置动画。
也就是说,摆脱红色框的中心-Y约束,并添加一个新约束,将红色框与superview底部相距Y距离。将此新约束连接到插座,然后您可以这样设置动画:
@IBOutlet weak var redYConstraint : NSLayoutConstraint!
override func viewDidLoad() {
super.viewDidLoad()
// This line sets the red box to be in the center Y of the green box
self.redYConstraint.constant = self.greenSquare.frame.midY
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
UIView.animate(withDuration: 3.0, delay: 2.0, options: UIViewAnimationOptions.curveEaseIn, animations: {
self.redYConstraint.constant = self.greenSquare.frame.maxY
self.view.layoutIfNeeded()
}, completion: nil)
}