每次 View Controller 出现时动画视图?

Animating View every time the View Controller appears?

我有一个 UIViewController,每次单击 UITabBarButtonItem 时都会触发它。问题是它有点像菜单,由从屏幕底部向上滑动的 UIView 组成。

现在,底部约束最初设置为 -500,因此它不在屏幕上。我创建了一个函数,通过一些动画将约束设置回 100。问题是我认为如果我调用 viewWillAppear() 中的函数,它每次都会被动画化。但事实并非如此。我还尝试在 viewDidDisappear() 中将约束重置回 -500,以便在下次触发之前它不在屏幕上。

无效。它只是第一次工作。我错过了什么或者我在错误的地方调用它...

    class PostVC: UIViewController {

    @IBOutlet weak var menuBottomConstraint: NSLayoutConstraint!

    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        animateMenu()
    }

    override func viewWillDisappear(_ animated: Bool) {
        super.viewWillDisappear(animated)
        menuBottomConstraint.constant = -500
    }

    func animateMenu() {
        menuBottomConstraint.constant = 100
        UIView.animate(
            withDuration: 1.0,
            delay: 0.0,
            usingSpringWithDamping: 0.5,
            initialSpringVelocity: 0.0, options: .curveEaseOut,
            animations: {
                self.view.layoutIfNeeded()
            },
            completion: nil
        )
    }
}

每次当您更改 Constraintconstant 值并且您会看到效果时,您必须调用 layoutIfNeeded() 方法。

在您的代码中:

override func viewWillDisappear(_ animated: Bool) {
    super.viewWillDisappear(animated)
    menuBottomConstraint.constant = -500
    self.view.layoutIfNeeded()
}

我还建议用 viewDidAppear

替换 viewWillAppear 函数