gpt4 book ai didi

ios - 关于iOS Constraint update Animation - Animation block + layoutIfNeeded

转载 作者:行者123 更新时间:2023-11-28 23:54:04 24 4
gpt4 key购买 nike

您好,我想了解 View 更新周期

我几乎能看懂一些东西,但有一些神秘的东西

我了解到动画 block 也会在更新周期触发

为了尝试理解动画 block 中的 layoutIfNeeded,我编写了一些示例代码,如下所示

class MyView: UIView {
override func layoutSubviews() {
super.layoutSubviews()
print("Layout Subviews")
}
}
class ViewController: UIViewController {

@IBOutlet weak var blueHeight: NSLayoutConstraint!

@IBAction func heightPressed(_ sender: AnyObject) {

if self.blueHeight.constant == 25.0 {
self.blueHeight.constant = self.view.bounds.height - 100.0
} else {
self.blueHeight.constant = 25.0
}

self.view.setNeedsLayout()
UIView.animate(withDuration: 2.0, animations: {
print("animation block")
self.view.layoutIfNeeded() // ----- **
}) { (_) in
print("animation ended")
}
}

override func viewDidLoad() {
super.viewDidLoad()
}
}

输出是这样的

"Layout Subviews"
"Layout Subviews" ---- because of initial settings
"Animation block"
"Layout Subviews"
"Animation ended"

但是当我将 layoutIfNeeded 更改为 setNeedsLayout 时,输出发生了变化

"Layout Subviews"
"Layout Subviews" ---- because of initial settings
"Animation block"
"Animation ended"
"Layout Subviews"

所以我理解动画 block 先执行然后 View 更新,所以动画 block 在更新周期中比 View 的更新具有更高的优先级

是吗?如果我错了,我想了解 View 的更新周期和动画 block 之间的关系

最佳答案

动画 block 内的内容,如果它是可动画的,则直到事务结束时的动画时间才会运行。

layoutIfNeeded 算作可动画。它在动画 block 中的作用是:它导致在代码中执行的帧等更改或通过 layoutSubviews 中的自动布局进行动画处理,而不是立即执行。

基本上,这是一种将下一个布局时刻包裹在动画中的方法。

关于ios - 关于iOS Constraint update Animation - Animation block + layoutIfNeeded,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51604295/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com