Просмотр жизненного цикла контроллера Что такое viewDidLayoutSubviews

Объяснение жизненного цикла контроллера представления: когда использовать viewDidLayoutSubviews.

Как разработчик iOS, мы всегда обеспокоены тем, что нам не хватает знаний или иногда мы чувствуем, что у нас недостаточно навыков. Мы говорим вам, всем программистам, что вы достаточно знаете и проявите терпение, продолжая преуспевать в своей повседневной работе или хобби в программировании..

Всегда есть много списков, составленных разными разработчиками, в которых говорится много разных вещей, которые мы, как разработчик iOS, должны знать в первую очередь. Но на сколько хватит? Сегодня мы сосредоточимся на мелких мелочах, которые помогут составить более четкое представление о том, как построить более прочный фундамент. Сначала мы разберемся с теми маленькими кодами, которые мы ежедневно используем в наших новых проектах. Поскольку я верю, что маленькие мелочи дадут нам лучшее понимание больших вещей..

В этом руководстве мы рассмотрим различия между viewDidLoad, viewDidAppear и viewDidLayoutSubviews. Мы надеемся, что к концу учебного курса вы лучше поймете жизненный цикл контроллера представления, чем раньше, и сможете эффективно использовать упомянутый метод..

Я попытаюсь использовать много разных способов объяснения методов, поскольку иногда утверждение трудно понять, а это настоящая борьба, которую понимает большинство из нас. Вы можете увидеть повторение объяснения, которое я попытаюсь перефразировать, используя другие слова, чтобы помочь вам понять его под другим углом..

Что такое viewDidLoad?

К настоящему времени вы должны быть знакомы с этим методом или, по крайней мере, иметь общее представление о том, что он делает каждый раз, когда вы запускаете свой код. Вы видите этот код каждый раз, когда создаете свой проект. Если вы этого не сделаете, все в порядке.

В определении, данном Apple для viewDidLoad, упоминается, что он вызывается после загрузки представления контроллера в память. Проще говоря, это первый метод, который загрузит.

Вы можете подумать, при каких условиях этот метод будет полностью использован? Ответ: в основном все, что вы хотели, чтобы приложение загружалось первым. Например, вам может потребоваться другой цвет фона вместо белого, вы можете выбрать синий.

Что такое viewDidAppear?

Некоторые из вас, вероятно, имеют опыт использования этого метода и в некоторой степени понимают его, в то время как некоторые могут найти его в новинку. Независимо от вашего опыта, вы, по крайней мере, воспользуетесь одним из них в своем проекте..

Apple определяет это как «уведомляет контроллер представления о том, что его представление было добавлено в иерархию представлений. Другими словами, это в основном означает, что это вызывается, когда экран отображается пользователю..

Разница между viewDidAppear и viewDidLoad заключается в том, что viewDidAppear вызывается каждый раз, когда вы попадаете на экран, в то время как viewDidLoad вызывается только один раз, то есть при загрузке приложения. Позвольте мне показать вам простой эксперимент, который поможет вам понять, как это работает..

Я объясню это более реалистично. Вы увидите, что в viewDidAppear я создал положение imageView за пределами экрана, добавив 300, и я использую анимацию, чтобы переместить изображение из-за пределов экрана в нижний центр экрана..

К настоящему времени вы должны знать и понимать, что viewDidAppear вызывается неоднократно, а viewDidLoad вызывается только один раз в примерах, показанных выше..

Что такое viewDidLayoutSubviews?

Apple дала очень хорошее объяснение по этому поводу, сказав, что он вызывается для уведомления контроллера представления о том, что его представление только что разместило свои подвиды. Другими словами, viewDidLayoutSubviews вызывается каждый раз, когда представление обновляется, поворачивается или изменяется или его границы меняются. Ключевое слово здесь — изменение границ.

Но знайте, что с viewDidLayoutSubviews это происходит только после того, как были применены все вычисления автоматического макета или автоматического изменения размера для представлений. Это означает, что метод viewDidLayoutSubviews вызывается каждый раз при изменении размера представления и пересчета макета представления..

Каждый раз, когда вы создаете приложение, viewDidLayoutSubviews будет выполняться сразу после viewDidLoad, потому что помните, что viewDidLayoutSubviews имеет место, когда применяется расчет макета. Затем, когда вы поворачиваете свое приложение, viewDidLayoutSubviews будет выполняться снова, и это работает только с портретной ориентации на альбомную и обратно на портретную. И не от ландшафта слева к пейзажу справа. Вы можете поиграть с ним, используя симулятор, выбрав Оборудование > Ориентация.

Но давайте подумаем об этом. Каково реальное использование этого? На приведенном ниже рисунке показаны различия и результат использования viewDidLayoutSubviews. Вы можете попробовать следующий пример, не реализовав viewDidLayoutSubviews, и вы увидите различия, как показано ниже. Обратите внимание на изменение ширины.

Теперь я объясню процесс метода с несколькими вещами, о которых нужно знать..

Это распечатает начальную позицию кнопки. Это заменит начальную позицию новой позицией. Это координата кнопки, которая будет загружена на экран — значение, загруженное с помощью viewDidLoad. Вы увидите, что позиция viewDidLoad перезаписывается значение viewDidLayoutSubviews, и когда вы повернете экран в портретную ориентацию, вы увидите изменение ширины.

Теперь последний вопрос, который, вероятно, возникнет у вас в голове: когда вы перезаписываете метод. Я уверен, что, основываясь на предыдущих примерах, которые вы видели, вы, вероятно, заметили, что viewDidLayoutSubviews всегда переопределяет viewDidLoad. .

Наконец, если вам все еще трудно понять, я надеюсь, что этот последний пример покажет вам сравнение того, как работают viewDidLoad, viewDidAppear и viewDidLayoutSubviews. Или даже перечитайте еще раз и убедитесь сами. Я загрузил код на GitHub на случай, если вы хотите увидеть и понять коды.

Похожие статьи