Попытка понять Render Loop из AutoLayout в iOS - PullRequest
0 голосов
/ 03 января 2019

Здравствуйте, я пытаюсь понять цикл рендеринга Auto Layout, который представлен в WWDC 2018 High Performance Auto Layout

Они сказали, что когда Engine (Auto Layout) рассчитал уравнение ограничений, а затем Engine сообщает значение View

При последнем просмотре вызова суперпредставления для вызова setNeedsLayout

Итак, я попытался проверить это

это мой взгляд

enter image description here

BlueView - это SuperView, а GreenView - это Subview

и я переопределяю setNeedsLayout, layoutSubviews, draw и updateConstraints, чтобы проверить порядок вызова метода

результат был такой

enter image description here

Я могу понять, кроме 4 раз setNeedsLayout Звонок и только Superview звонок setNeedsLayout

Это мои вопросы

  1. Почему только вызов SuperView setNeedsLayout
  2. Почему 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")
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...