Здравствуйте, я пытаюсь понять цикл рендеринга Auto Layout, который представлен в WWDC 2018 High Performance Auto Layout
Они сказали, что когда Engine (Auto Layout) рассчитал уравнение ограничений, а затем Engine сообщает значение View
При последнем просмотре вызова суперпредставления для вызова setNeedsLayout
Итак, я попытался проверить это
это мой взгляд
BlueView - это SuperView, а GreenView - это Subview
и я переопределяю setNeedsLayout
, layoutSubviews
, draw
и updateConstraints
, чтобы проверить порядок вызова метода
результат был такой
Я могу понять, кроме 4 раз setNeedsLayout
Звонок и только Superview звонок setNeedsLayout
Это мои вопросы
- Почему только вызов SuperView
setNeedsLayout
- Почему
setNeedsLayout
звонили 4 раза в этом случае
Это мой код
class SuperView: UIView {
override func updateConstraints() {
super.updateConstraints()
print("SuperView : updateConstraints")
}
override func setNeedsLayout() {
super.setNeedsLayout()
print("SuperView : setNeedsLayout")
}
override func layoutSubviews() {
super.layoutSubviews()
print("SuperView : layoutSubviews")
}
override func draw(_ rect: CGRect) {
super.draw(rect)
print("SuperView : draw")
}
}
class SubView: UIView {
override func updateConstraints() {
super.updateConstraints()
print("SubView : updateConstraints")
}
override func setNeedsLayout() {
super.setNeedsLayout()
print("SubView : setNeedsLayout")
}
override func layoutSubviews() {
super.layoutSubviews()
print("SubView : layoutSubviews")
}
override func draw(_ rect: CGRect) {
super.draw(rect)
print("SubView : draw")
}
}