每次View Controller出现时动画查看?

时间:2017-08-12 18:49:23

标签: swift uiview uiviewanimation viewwillappear

我每次点击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
        )
    }
}

1 个答案:

答案 0 :(得分:1)

每当您更改constant的{​​{1}}值时,您都会看到效果,那么您必须调用Constraint方法。

你的代码中的

layoutIfNeeded()

我还建议将override func viewWillDisappear(_ animated: Bool) { super.viewWillDisappear(animated) menuBottomConstraint.constant = -500 self.view.layoutIfNeeded() } 函数替换为viewWillAppear