์ด ํฌ์คํธ๋ view, layout ์ ๋ฐ์ดํธ ๋ฉ์๋๋ฅผ ์ ๋ฆฌํ๋๋ฐ ํ์ํ ์ฐ๊ด์ง์์ ๋จผ์ ์ค๋ช ์ ํ๊ณ view, layout ์ ๋ฐ์ดํธ ๋ฉ์๋๋ฅผ ์ค๋ช ํ ์์ . ์์๋ ๋ค์๊ณผ ๊ฐ๋ค
1. Main Run Loop
2. Update Cycle
3. constraints ์ ๋ฐ์ดํธ
4. layouts ์ ๋ฐ์ดํธ
5. display ์ ๋ฐ์ดํธ
6. Drawing Cycle
1. Main Run Loop
์ฑ์ด ์คํ๋์ด ์์คํ ์์ ์ผ์ด๋๋ ํ๋ก์ธ์ค๋ค์ https://yongminlee26.tistory.com/204 ์ ์ ๋ฆฌํ์๋ค.
์ฑ์ด ์คํ๋๋ฉด UIApplication ๊ฐ์ฒด๋ ์ ์ ๊ฐ ์ผ์ผํค๋ ์ด๋ฒคํธ๋ค์ ์ฒ๋ฆฌํ๋ ํ๋ก์ธ์ค Main Run Loop๋ฅผ ์คํ ํ์ฌ
์ ์ ๋ก๋ถํฐ์ input ์ด๋ฒคํธ๋ฅผ ํด์ํ๊ณ ๊ทธ์ ์์๋๋ ์ ํ๋ฆฌ์ผ์ด์ ์ Core object๋ค ์์ ์๋ ํธ๋ค๋ฌ๋ฅผ ํธ์ถํด์ค๋๋ค.
ํธ๋ค๋ฌ๋ค์ ์ฐ๋ฆฌ, ๊ฐ๋ฐ์๋ค์ด ์ด ์ฝ๋๋ฅผ ํธ์ถํด์ฃผ๋๋ฐ ์ด๋ฌํ ๋ฉ์๋๋ค์ด ๋ฐํ๋๋ฉด ๋ค์ ์ปจํธ๋กค์ main run loop๋ก ๋์๊ฐ๊ณ
View ๋ค์ ๋ฐฐ์นํ๊ณ ๋ค์ ๊ทธ๋ฆฌ๋ ์ญํ ์ ํ๋ Update Cycle์ด ์์๋๋ค
2. Update Cycle
- ์์คํ ์ Update Cycle์์ UIView์ ๋ชจ๋ ๋ณํ๋ฅผ ์ํ
- iOS ์ ํ๋ฆฌ์ผ์ด์ ์ ์ด๋น 60ํ๋ ์์ ๋ณด์ฌ์ฃผ๊ธฐ ๋๋ฌธ์ ์ ์ ๋ UI์ ์ํธ์์ฉ ๊ฐ์ ์ฐจ์ด๋ฅผ ๋๋ผ์ง ๋ชปํ์ง๋ง, ์ด๋ฒคํธ๊ฐ ์ฒ๋ฆฌ๋๋ ์์ ๊ณผ ์ค์ ๋ก View๊ฐ ๋ค์ ๊ทธ๋ ค์ง๋ ์์ ์ ์ฐจ์ด๊ฐ ์๊ธฐ ๋๋ฌธ์, View๋ ์ฐ๋ฆฌ๊ฐ View๋ฅผ ์ ๋ฐ์ดํธ ํ๊ธฐ๋ฅผ ์ํ๋ run loop์ ํน์ ์์ ์ ์ ๋ฐ์ดํธ๊ฐ ๋์ง ์์ ์ ์๋ค.
- ํด๊ฒฐ๋ฐฉ์ : constraints, layouts, contenst ์ ๋ฐ์ดํธ ๋ฉ์๋๋ฅผ ์ด์ฉ
- Auto layout์์ ๋ทฐ๊ฐ ๋ ์ด์์๋๊ณ ๋ค์ ๊ทธ๋ ค์ง๋ ๊ณผ์ ์ ์ธ ๋จ๊ณ๋ก ๋๋๋ค
- constraints ์ธํ : ๋จผ์ ๋ทฐ์ ํ์ํ ๋ชจ๋ ์ ์ฝ๋ค์ ์ธํ
- layout ๋ฐฐ์น : ๋ ์ด์์ ์์ง์ด ๋ทฐ์ ๋ชจ๋ ํ์๋ทฐ์ ํ๋ ์(์ขํ+์ฌ์ด์ฆ)์ ๊ณ์ฐํด์ ์ฌ๋ฐฐ์น
- display : ๋ทฐ์ ์ปจํ ์ธ ๋ฅผ ๊ทธ๋ฆฐ๋ค.
3. Constraints ์ ๋ฐ์ดํธ
updateConstraints()
์คํ ๋ ์ด์์์ ์ฌ์ฉํ๋ ๋ทฐ์ constraints๋ค์ ๋์ ์ผ๋ก ๋ฐ๊พธ๋ ๋ฉ์๋.
updateConstraints๋ ์ค์ง ์ค๋ฒ๋ผ์ด๋ฉ๋์ด์ผ ํ๋ฉฐ ๋ช ์์ ์ผ๋ก ํธ์ถ๋์ด์๋ ์๋๋ค.
constraints์ ์ ๋ฐ์ดํธํด์ผํ๋๊ฒฝ์ฐ ์์คํ ์๊ฒ updateConstraints()๋ฅผ ํธ์ถํ๋๋ก ์์ฒญ ํด์ผํ๋ค.
setNeedsUpdateConstraints()
๋ค์ ์ ๋ฐ์ดํธ ์ธ์ดํด์์ ์ ์ฝ์ฌํญ๋ค์ ๋ํ ๊ฐฑ์ ์ด ์ผ์ด๋๋๋ก updateConstraints๋ฅผ ์์ฝํ๋ ๋ฉ์๋.
updateConstraintsIfNeeded()
์คํ ๋ ์ด์์์ ์ฌ์ฉํ๋ ๋ทฐ์ ๋ํด์ ์ฆ์ updateConstraints ๋ฉ์๋ ํธ์ถ์ ์์คํ ์๊ฒ ์์ฒญํ๊ณ ๋ฐ ๋ฃจํ๊ฐ ๋๋ ๋๊น์ง ๊ธฐ๋ค๋ฆฌ์ง ์๋ ๋ฉ์๋.
4. Layouts ์ ๋ฐ์ดํธ ๋ฉ์๋
layoutSubviews()
์ด ๋ฉ์๋๋ UIView์ ๋ฉ์๋๋ก ํด๋น ๋ทฐ์ ๋ชจ๋ ํ์๋ทฐ์ repositioning, resizing์ handleํ๋ค.
๋ทฐ์ ํ๋ ์์ ๋ค์ ๊ณ์ฐํด์ผํ ๋ ์ด ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋๋ฐ ํด๋น๋ทฐ์ ๋ชจ๋ ํ์๋ทฐ์ ๋ํด์ ์๋ํ๊ธฐ ๋๋ฌธ์ expensiveํ๋ฏ๋ก ์ด ๋ฉ์๋๋ ๊ฐ๋ฐ์๊ฐ ๋ช ์์ ์ผ๋ก ํธ์ถํด์๋ ์๋๊ณ , ์์คํ ์ด ํธ์ถํ๋๋ก ๋ฌ์ผํ๋ค.
๊ฐ๋ฐ์๋ ์์คํ ์ผ๋ก ํ์ฌ๊ธ layoutSubview()๋ฅผ ํธ์ถํ๋๋ก ์์ฒญํด์ผํ๋๋ฐ ์ด๋ setNeedsLayout, layoutIfNeeded ๋ฉ์๋๋ฅผ ์ด์ฉํ๋ค. ๋ฉ์๋๋ค์ ์ ๋ฐ์ดํธ ์ธ์ดํด์ด ์๋๋ผ ๋ฉ์ธ ๋ฐ ๋ฃจํ ์์ ์ layoutSubviews๋ฅผ ํธ๋ฆฌ๊ฑฐํ๋ค
setNeedsLayout()
์ด ๋ฉ์๋๋ ์์คํ ์ผ๋ก ํ์ฌ๊ธ ์์ ์ ํธ์ถํ ๋ทฐ์ ๋ ์ด์์์ด ๋ค์ ๊ณ์ฐ๋์ด์ผ ํ๋ค๊ณ ์๋ ค์ฃผ๊ณ ์ฆ์ ๋ฐํ๋๋ค.
๋์ , ๋ทฐ๋ ๋ค์ ์ ๋ฐ์ดํธ ์ธ์ดํด์ ๊ฐฑ์ ๋๋ค.
layoutIfNeeded()
๋ค์ ์ ๋ฐ์ดํธ ์ธ์ดํด์ layoutSubviews๋ฅผ ์์ฝํ๋ ๊ฒ์ด ์๋๋ผ ์์คํ ์๊ฒ ์ฆ์(immediately) ๋ ์ด์์ ์ ๋ฐ์ดํธ๋ฅผ ๊ฐฑ์ ํด๋ฌ๋ผ๊ณ ์์ฒญํ๋ค.
๋ค์ ์ ๋ฐ์ดํธ ์ธ์ดํด๊น์ง ๊ธฐ๋ค๋ฆฌ์ง ์๊ณ ๋ฐ๋ก layoutSubviews๋ฅผ ํธ์ถํ๋ ๋๊ธฐ ๋ฉ์๋์ด๋ค.
5. Display ์ ๋ฐ์ดํธ ๋ฉ์๋
Display
๋์คํ๋ ์ด๋ ๋ทฐ์ ํ์๋ทฐ์์ sizing, positioning์ ๋๋ฐํ์ง ์๋ ์์๋ค์ ํฌํจํ๋ค.
=> ์์, ํ ์คํธ, ์ด๋ฏธ์ง, ์ฝ์ด ๊ทธ๋ํฝ์ค ๋ฑ๋ฑ
draw(_: )
UIView๋ draw ๋ฉ์๋๋ฅผ ํตํด์ ๋ทฐ์ ์ปจํ ์ธ ๋ฅผ ๊ทธ๋ฆฐ๋ค.
draw ๋ฉ์๋๋ ํ์๋ทฐ์ ๋ํด ์ฐ์์ ์ผ๋ก ํธ์ถ๋์ง ์๋๋ค.
draw ๋ฉ์๋๋ ์์คํ ์ด ํธ์ถํด์ฃผ๋ ํจ์์ด๋ฏ๋ก ๊ฐ๋ฐ์๋ ์์คํ ์๊ฒ draw๋ฉ์๋๋ฅผ ํธ์ถํ ๊ฒ์ ์์ฒญํ๋ค.
setNeedsDisplay()
๋ทฐ์ ์ปจํ ์ธ ๊ฐฑ์ ์ ์์ฝํ๊ณ ๋ฐํ๋๋ฉฐ ๋ค์ ์ ๋ฐ์ดํธ ์ธ์ดํด์์ ์์คํ ์ ๋ชจ๋ ๋ทฐ๋ค์ ๋ํด ์ด๋ฌํ ๊ฐฑ์ ์์ฒญ์ด ๋งํฌ๋์๋ค๋ฉด draw()๋ฅผ ํธ์ถํด์ ์ ๋ฐ์ดํธํ๋ค.
displayIfNeeded()
๋ค์ ์ ๋ฐ์ดํธ ์ธ์ดํด์ draw()๋ฅผ ์์ฝํ๋ ๊ฒ์ด ์๋๋ผ ์์คํ ์๊ฒ ์ฆ์(immediately) display ์ ๋ฐ์ดํธ๋ฅผ ๊ฐฑ์ ํด๋ฌ๋ผ๊ณ ์์ฒญํ๋ค.
๋ค์ ์ ๋ฐ์ดํธ ์ธ์ดํด๊น์ง ๊ธฐ๋ค๋ฆฌ์ง ์๊ณ ๋ฐ๋ก draw()๋ฅผ ํธ์ถํ๋ ๋๊ธฐ ๋ฉ์๋์ด๋ค.
6. Drawing Cycle
- ๋ทฐ๊ฐ ๋ก๋๋๊ฑฐ๋ ๋ณ๊ฒฝ์ด ์์ ๋ ํ๋ฉด์ ์๊ฐ์ ์ผ๋ก ํํ๋์ด ๊ทธ๋ ค์ง๋ ์ผ์ข ์ ์ฌ์ดํด
- ๋ทฐ ๋ก๋ ์ ์์คํ ์ด UIView์๊ฒ draw๋ฉ์๋๋ฅผ ํตํด์ ๋๋ก์์ ์์ฒญํ๋ค.
- ๋ทฐ์ ์ค๋ ์ท์ ์บก์ฒํ์ฌ UIView์๊ฒ ์ ๋ฌ
- ๋ทฐ์ ์ปจํ ์ธ ๋ณ๊ฒฝ ์ ๊ด๋ จ ๋ฉ์๋ (setNeedsDisplay, setNeedsLayout ๋ฑ๋ฑ...) ํธ์ถํ์ฌ ์์คํ ์ ์ ๋ฐ์ดํธ ์์ฒญ
- Next Drawing Cycle์์ ์ ๋ฐ์ดํธ ์์ฒญ ๋ฐ์ ๋ทฐ๋ฅผ ์ ๋ฐ์ดํธ
์ค๋ ์ฟ์ ํตํด์ ์ด์ ํ๋ฉด๊ณผ ๋ณ๊ฒฝ์ด ์๋ค๋ฉด? drawing cycle์ ๋์ง ์์ ๊ฒ์ด๋ค.
์ฐธ๊ณ ์๋ฃ
https://velog.io/@leeyoungwoozz/iOS-View-Layout-Cycle
https://sihyungyou.github.io/iOS-setNeedslayout-layoutIfNeeded/
https://zeddios.tistory.com/359
'iOS ๐ > iOS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Frame-base layout vs Auto layout (0) | 2022.03.02 |
---|---|
translatesAutoresizingMaskIntoConstraints ์์ฑ (0) | 2022.02.23 |
Notification Service Extension (0) | 2021.12.06 |
App Extension (0) | 2021.12.06 |
Xcode Target, Project, Workspace (0) | 2021.12.06 |