使用Swift 4和UIView

时间:2017-09-28 03:10:03

标签: ios swift xcode animation uiview

我真的无法弄清楚我的代码有什么问题。让我详细解释一下我的目标是什么:

  • 我在同一个UIView中有两个UIViewController。他们被称为“redSquare”和“greenSquare”。
  • 当呈现UIViewController时,我想为redSquare设置动画,以便在Y轴上移动,直到它到达greenSquare的上边界。

这是我设置xCode项目的方式:

enter image description here

我得到的行为完全相反,我真的不明白为什么以及发生了什么:

enter image description here

对此有何提示或解释?

1 个答案:

答案 0 :(得分:2)

好。部分问题在于您正在调整中心Y ...这意味着您正试图通过动画来破坏约束。

问题的另一部分是你在viewDidLoad进行动画制作,完全在viewWillAppearviewDidAppear被调用之前运行。

对于我自己的动画,我通常会为约束设置动画。

也就是说,摆脱红色框的中心-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)
}