繁体   English   中英

更改约束时`self.view.layoutIfNeeded()`做什么

[英]What does `self.view.layoutIfNeeded()` do when changing constraints

所以我正在学习如何从屏幕外制作视图动画,以用作滑块菜单。

class ViewController: UIViewController {
    @IBOutlet weak var red: UIView!
    @IBOutlet weak var redHConstraint: NSLayoutConstraint!

    @IBAction func buttonShift(sender: AnyObject) {
        self.view.layoutIfNeeded()        // **HERE**
        UIView.animateWithDuration(0.5) {
            self.redHConstraint.constant = 0
            self.view.layoutIfNeeded()    // And **HERE**
        }
    }

}

我已经改编了如何使用Swift中的约束来动画UIView的代码

1. self.view.layoutIfNeeded()代码的一部分是做什么的?

2.为什么在动画之前和期间编码2x?

注意:如果我注释掉第一个self.view.layoutIfNeeded()没有任何变化,但如果我注释掉第二个self.view.layoutIfNeeded()该动作不再是动画的,只会出现在新坐标中。

基本上调用self.view.layoutIfNeeded()将强制self.view及其子视图的布局,如果某些更改为self.view设置setNeedsLayout

setNeedsLayout用于设置一个标志,每当调用layoutIfNeeded()时,都会调用layoutSubviews 它决定了呼叫的“如果需要”方面。

如果你对UIView进行了更改,导致它变为setNeedsLayout但是没有调用layoutIfNeeded() (因此不调用layoutSubviews),它将不会更新,因此可能会导致动画出现问题。 如果您事先调用它,它将确保如果有更改需要更新布局,那么它将在动画制作之前将其应用于您的视图及其所有子视图。

当然,在制作动画时,您正在进行需要更新的更改。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM