View(ViewController) Layout Cycle
์๋ก
์ฑ๊ฐ๋ฐ์ 40% ์ ๋๋ View๋ฅผ ๊ทธ๋ฆฌ๊ณ Layout์ ๊ตฌ์ฑํ๋๋ฐ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ์ด๋ค ์ฑ์ Frame๊ธฐ๋ฐ Layout์ ์ฌ์ฉํ๋ฉฐ ๋ ์ด๋ค ์ฑ์ AutoLayout๊ธฐ๋ฐ์ Layout์ ์ด์ฉํฉ๋๋ค.iOS11๊ณผ iPhoneX์ ๋ฑ์ฅ์ผ๋ก ์ฌ์ค์ AutoLayout์ ์ ํ์ด ์๋ ํ์๊ฐ ๋์์ต๋๋ค.iPhoneX์๋ฆฌ์ฆ์ ๋
ธ์น๋์์ธ์ ๋์ํ๊ธฐ ์ํด์๋ Frame๊ธฐ๋ฐ๋ณด๋ค AutoLayout๊ธฐ๋ฐ์ด ๋ ํจ์จ์ ์ด๊ธฐ ๋๋ฌธ์
๋๋ค.ํ์ง๋ง ํ์ค์ ์ผ๋ก ๊ธฐ์กด Frame๊ธฐ๋ฐ์ ๋ ์ด์์์ ํ๋ฒ์ AutoLayout์ผ๋ก ๋ณ๊ฒฝํ๊ธฐ ์ด๋ ต๊ธฐ ๋๋ฌธ์ ๋ ๊ฐ์ง ๋ฐฉ์์ ์์ด ์ฌ์ฉํ๊ฒ ๋๋๋ฐ, ์ฌ๊ธฐ์์ View(ViewController)์ Layout Cycle์ ์ดํดํ ํ์๊ฐ ์์ต๋๋ค.์ด๋ฒ ํฌ์คํ
์์๋ Layout Cycle์ ์ดํด๋ฅผ ํตํด ์ข ๋ ๋์ ์ฑ์ ๋ง๋ค์ ์๋ ๊ณต๋ถ๋ฅผ ๋ชฉ์ ์ผ๋ก ํฉ๋๋ค.
View๋ฅผ ๊ทธ๋ฆฌ๋ 3๋จ๊ณ ํ๋ก์ธ์ค
1.
Constraint Update
โข
์ ์ฝ์กฐ๊ฑด(Constraint)๋ฅผ ์
๋ฐ์ดํธ ํฉ๋๋ค. Constraint๋ Code๋ก๋ ๊ตฌ์ฑ ๊ฐ๋ฅํ๋ฉฐ ๋๋ถ๋ถ Interface Builder๋ฅผ ์ด์ฉํด Constraint๋ฅผ ๋ง๋ญ๋๋ค. Constraint๋ ๋ง ๊ทธ๋๋ก ์ ์ฝ์กฐ๊ฑด์ด๋ฉฐ View๋ฅผ ์ค์ ๋ก ๋ฐฐ์นํ๋๋ฐ์๋ ์ํฅ์ ์ฃผ์ง ์์ต๋๋ค. ํน์ ์กฐ๊ฑด์ ๋ฐ๋ผ Constraint๋ฅผ ๊ฐฑ์ ํ์ฌ Dynamic View๋ฅผ ๊ตฌ์ฑํ ์ ์์ต๋๋ค.
โข
Constraint์ ์
๋ฐ์ดํธ ์์๋ View ๊ณ์ธต๊ตฌ์กฐ์์ ๊ฐ์ฅ ํ์๋ทฐ๋ถํฐ ์์๋ทฐ๋ก ์ฌ๋ผ๊ฐ๋๋ค.
1.
Layout Update
โข
Layout์ ์
๋ฐ์ดํธ ํฉ๋๋ค. ์ฌ๊ธฐ์์ Layout์ด๋ ๊ตฌ์ฒด์ ์ธ ๋ทฐ์ Frame ์์น ๊ฐ์
๋๋ค. Constraint ๊ฐ์ ์ด์ฉํด View๊ฐ ์์นํด์ผ ํ ์์น๊ฐ์ ๊ฐฑ์ ํฉ๋๋ค.
โข
layout์ ์
๋ฐ์ดํธ ์์๋ View์ ๊ณ์ธต๊ตฌ์กฐ์์ ๊ฐ์ฅ ์์๋ทฐ๋ถํฐ ํ์๋ทฐ๋ก ๋ด๋ ค๊ฐ๋๋ค.
1.
Render
โข
View๋ฅผ 2๋จ๊ณ์์ ๊ตฌํ ์์น๊ฐ์ ์ด์ฉํด ํ๋ฉด์ ์ง์ ๊ทธ๋ฆฝ๋๋ค. UIView์ DrawRect: ๋ฉ์๋๊ฐ ์ด์ ํด๋นํฉ๋๋ค.
ViewController์ Layout Cycle
์ ๋จ๊ณ์์ ์ดํดํ 3๋จ๊ณ ํ๋ก์ธ์ค๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ViewController์ Layout Cycle์ ๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
ViewController๋ ์์ ํ๊ณ ์๋ View๋ค์ Constraint, Layout, Render ์์์ ๋ฐ๋ผ Override ๋ฉ์๋๋ค์ ์์คํ
์ ํธ์ถ์ ์ํด ์คํํฉ๋๋ค.
์์น ๋ณ๊ฒฝ ๋ฑ์ผ๋ก View๋ฅผ ๋ค์ ๊ทธ๋ ค์ผ ํ ๋ ๊ฐ๋ฐ์๊ฐ ํด์ผ ํ๋ ๊ฒ
โข
Layout์ ๊ฐฑ์ ํ ๋ : setNeedsLayout() ํจ์ ํธ์ถ๋ก View์ layout์ ๊ฐฑ์ ํด์ผ ํ๋ค๋ ํ๋๊ทธ๋ฅผ ํ์ํ๋ค. ์์คํ
์ด ํ๋๊ทธ๋ฅผ ๋ณด๊ณ ViewController์ Layout Update ํ๋ก์ธ์ค๋ฅผ ์คํ์ํจ๋ค.
โข
Constraint๋ฅผ ๊ฐฑ์ ํ ๋ : setNeedsUpdateConstraints() ํจ์ ํธ์ถ๋ก View์ constraint๋ฅผ ๊ฐฑ์ ํด์ผ ํ๋ค๋ ํ๋๊ทธ๋ฅผ ํ์ํ๋ค. ์์คํ
์ด ํ๋๊ทธ๋ฅผ ๋ณด๊ณ ViewController์ Constraint Update ํ๋ก์ธ์ค๋ฅผ ์คํ์ํจ๋ค.
ํ๋๊ทธ๋ฅผ ํ์ํ๋ค๋ ์๋ฏธ
โข
์์คํ
์ ๊ฐ๋ฐ์๊ฐ setNeedsLayout() ๋๋ setNeedsUpdateConstraints()๋ฅผ ํธ์ถํ๋ฉด ๋ฐ๋ก View๋ฅผ ๋ค์ ๊ทธ๋ฆฌ์ง ์๋๋ค. ํ๋ฒ์ RunLoop ์์์ View์ ๊ฐฑ์ ์ด ์ฌ๋ฌ๋ฒ ์ผ์ด๋๋ฉด ๋นํจ์จ ์ ์ด๊ธฐ ๋๋ฌธ์, ๊ฐ์ฅ ํจ์จ์ ์ธ ๋ฐฉ๋ฒ์ ๊ณ ๋ คํ๋ค.
โข
iOS๋ RunLoop๊ฐ ๋๋๊ณ ๋ค์ RunLoop๋ฅผ ์คํํ ๋ view์ ํ๋๊ทธ๋ฅผ ๋ณด๊ณ ํ๋ฒ์ ๋ชจ๋ View๋ฅผ ๊ฐฑ์ ํ๋ ๋ฐฉ๋ฒ์ ์ ํํ๋ค.
๊ฐ๋ฐ์๊ฐ ํ๋๊ทธ๋ฅผ ํ์ํ์ง ์์ผ๋ฉด View๋ ๊ฐฑ์ ๋์ง ์์๊น?
๊ฐ๋ฐ์๊ฐ View์ ๊ฐฑ์ ํ๋๊ทธ๋ฅผ ์ฌ๋๊ฒ์ ์ต์
, ์์คํ
์ ์ผ๋ก ํ๋๊ทธ๋ฅผ ํ์ํ๋ ์ผ์ด์ค๊ฐ ์๋ค.
โข
View์ Frame ๋ณ๊ฒฝ.
โข
View์ subView๊ฐ ์ถ๊ฐ๋๋ ๊ฒฝ์ฐ.
โข
๋๋ฐ์ด์ค์ orientation์ด ๋ณ๊ฒฝ๋๋ ๊ฒฝ์ฐ.(๋๋ฐ์ด์ค ํ์ )
โข
Constraint Constant์ ๋ณ๊ฒฝ.
๋ฑ์ด ์์ผ๋ฉฐ. ์ด ๊ฒฝ์ฐ์๋ View๋ ๋ค์ RunLoop์์ ๊ฐฑ์ ๋๋ค.
LayoutlayoutIfNeeded(), updateConstraintsIfNeeded()์ ์ฉ๋
์ ๋จ๊ณ์์ ํ๋๊ทธ๋ฅผ ํตํด ๋ค์ RunLoop์์ View๋ฅผ ๊ฐฑ์ ๋ ์ ์๋๋ก ํ๋ ๋ฐฉ๋ฒ์ ์์์ต๋๋ค.UIView์ ๋ฉ์๋๋ฅผ ๋ ์ดํด๋ณด๋ฉด LayoutlayoutIfNeeded(), updateConstraintsIfNeeded()๊ฐ ์์ต๋๋ค.์ด ๋ฉ์๋๋ ๋ค์ RunLoop๊ฐ ์๋, ํธ์ถ ๊ทธ ์ฆ์ View๋ฅผ ๊ฐฑ์ ํฉ๋๋ค. ์์คํ
์ด ํธ์ถ์ ๊ธฐ๋ค๋ฆฌ์ง ์๊ณ ๋ฐ๋ก ํธ์ถํ๋ ๊ฒฝ์ฐ๋ Animation์
๋๋ค.UIView์ ์ ๋๋ฉ์ด์
์ View์ ์์์์ , View์ ๊ฐฑ์ ์ข
๋ฃ ์์ ๋๊ฐ์ง End point๋ฅผ ์์ฐ์ค๋ฝ๊ฒ ์ฐ๊ฒฐ์์ผ์ฃผ๋ ๋์์ด๊ธฐ ๋๋ฌธ์ View๋ฅผ ๋ฐ๋ก ๊ฐฑ์ ์์ผ์ค์ผ ํ๋ฉฐ ๊ทธ ์ด์ ๋ก ์ ๋ฉ์๋๋ฅผ ์ฌ์ฉํฉ๋๋ค.
๊ฒฐ๋ก
์ฑ์ ๊ตฌํํ๋ฉด์ Server API์ ํ๋๊ทธ ๋ฑ ๋ค์ํ ๊ฒฝ์ฐ์ Dynamic View๋ฅผ ๊ตฌํํด์ผ ํฉ๋๋ค. Layout Cycle์ ์ ํํ๊ฒ ์ดํดํ๊ณ ์ ์ ํ ๋ฉ์๋์ ๋ก์ง์ ๊ตฌํํจ์ผ๋ก์จ ์ฌ์ด๋ ์ดํํธ ์๋ View๋ฅผ ๊ทธ๋ฆด ์ ์๋๋ก ๊ณ์์์ ์ฐ์ตํด์ผ๊ฒ ์ต๋๋ค.๊ทธ๋ผ์๋ ๋ถ๊ตฌํ๊ณ ์ iOS10 ์์๋ AutoLayout์ด ๋น์ ์์ ์ผ๋ก ๋์ํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์๊น์ ใ
ใ