- Apple Developer - UIView
- View Programming Guide for iOS
- Drawing and Printing Guide for iOS
- ZeddiOS - View/๋ ์ด์์ ์ ๋ฐ์ดํธ ๊ด๋ จ ๋ฉ์๋
UIView์ ๊ณต์๋ฌธ์๋ฅผ ์ดํด๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ์ ๋ด์ฉ์ด ๋์จ๋ค.
View์ ์ค์ ์ปจํ
์ธ ๊ฐ ๋ณ๊ฒฝ๋ ๋, view๊ฐ ๋ค์ ๊ทธ๋ ค์ง ํ์๊ฐ ์์์ ์์คํ
์ ์๋ฆฌ๋ ๊ฒ์ ๊ฐ๋ฐ์์ ์ฑ
์์
๋๋ค.
๊ฐ๋ฐ์๋ view์ setNeedsLayout๋ setNeedsDisplay๋ฅผ ํธ์ถํจ์ผ๋ก์จ ์ด๋ฅผ ์ํํ ์ ์์ต๋๋ค. ์ด ๋ฉ์๋๋ค์ ์์คํ
์ด ๋ค์ drawing cycle ๋์ view๋ฅผ ์
๋ฐ์ดํธ ํด์ผํจ์ ์ ์ ์๊ฒ ํด์ค๋๋ค. view๋ฅผ ์
๋ฐ์ดํธ ํ๊ธฐ ์ํด ๋ค์ drawing cycle๊น์ง ๊ธฐ๋ค๋ฆฌ๊ธฐ ๋๋ฌธ์, ์ฌ๋ฌ view์์ ์ด ๋ฉ์๋๋ฅผ ํธ์ถํ์ฌ ๋์์ ์
๋ฐ์ดํธ ํ ์ ์์ต๋๋ค.
๋ด์ฉ์์ ์ ์ ์๋ฏ์ด setNeedsLayout
, setNeedsDisplay
๋ ๋ฉ์๋ ๋ชจ๋ UIView์ ํ์ ์ธ์คํด์ค ๋ฉ์๋์ด๋ค. ๊ทธ๋ฆฌ๊ณ ์ด ๋ฉ์๋๋ค์ view์ ์
๋ฐ์ดํธ๊ฐ ์ผ์ด๋๊ณ ์ด๋ฅผ ์์คํ
์ ์๋ฆฌ๊ธฐ ์ํด ํธ์ถ๋๋ค. ๊ทธ๋ฌ๋ฉด ์์คํ
์ drawing cycle์ด ๋์์์ ๋ ์ด๋ฅผ ์ธ์งํ๊ณ view๋ฅผ ์
๋ฐ์ดํธํด์ฃผ๊ฒ๋๋ค.
- View์ ๋ด์ฉ์ ๋ค์ ๊ทธ๋ ค์ผ ํจ์ ์์คํ
์ ์๋ฆฐ๋ค. ๊ทธ๋ฆฌ๊ณ ์ฆ์ ๋ฆฌํด๋๋ค. ์์ฒญ์
๋ค์ drawing cycle
์ ๋ฐ์๋๋ค.
๋ค์ drawing cycle์ ๋ฐ์ ์์ฒญ๋ค์ด ํ๋ฒ์ ๋ฐ์๋๊ธฐ ๋๋ฌธ์ ์์ฒญ๋ง ํ๊ณ ์ฆ์ ๋ฆฌํด๋๋ ๊ฒ
- ์ด ๋ฉ์๋๋ UIKit, Core Graphics๋ฅผ ์ฌ์ฉํ๋ View์์๋ง ์ฌ์ฉํด์ผ ํจ๊ณผ๊ฐ ์๋ค.
- ์ด ๋ฉ์๋๋ View์ ๋ด์ฉ์ด๋ ๋ชจ์์ด ๋ณ๊ฒฝ๋ ๊ฒฝ์ฐ์๋ง View๋ฅผ ๋ค์ ๊ทธ๋ฆฐ๋ค ์์น์ ๋ณํ๋ ์ ์ฉ๋์ง ์๋๋ค.
- ์ด ๋ฉ์๋๋ฅผ ํธ์ถํ๋ฉด,
draw(_ rect:)
๋ฉ์๋๊ฐ ๋ด๋ถ์ ์ผ๋ก ํธ์ถ๋๋ค. - ๋ฉ์๋๊ฐ ์์ฒญํ ์์
(View์ ๋ด์ฉ์ ๋ค์ ๊ทธ๋ฆฌ๋)์ ์์ฒญ ์์ ๋ณด๋ค ๋์ค์ ์ผ์ด๋๊ฒ ๋จ์ผ๋ก ์ด ๋ฉ์๋๋
๋น๋๊ธฐ ์กํฐ๋นํฐ
์ด๋ค.
- receiver(์์ ์)์ ํ์ฌ ๋ ์ด์์์ ๋ฌดํจํํ๊ณ ,
๋ค์ ์ ๋ฐ์ดํธ ์ฃผ๊ธฐ ๋์
๋ ์ด์์ ์ ๋ฐ์ดํธ๋ฅผ ํธ๋ฆฌ๊ฑฐํ๋ค. - View์ ํ์ View์ ๋ํ ๋ ์ด์์์ ์กฐ์ ํ๋ ค๋ฉด, App์ main ์ฐ๋ ๋์์ ์ด ๋ฉ์๋๋ฅผ ํธ์ถํ๋ค.
- ์ด ๋ฉ์๋๋ฅผ ํธ์ถํ๋ฉด,
[layoutSubViews()](https://developer.apple.com/documentation/realitykit/arview/layoutsubviews()/)
๋ฉ์๋๊ฐ ๋ด๋ถ์ ์ผ๋ก ํธ์ถ๋๋ค. - ๋ฉ์๋๊ฐ ์์ฒญํ ์์
(View์ ๋ ์ด์์์ ๋ค์ ๊ทธ๋ฆฌ๋)์ ์์ฒญ ์์ ๋ณด๋ค ๋์ค์ ์ผ์ด๋๊ฒ ๋จ์ผ๋ก ์ด ๋ฉ์๋๋
๋น๋๊ธฐ ์กํฐ๋นํฐ
์ด๋ค.
๋ฒ์ธ - layoutIfNeeded()
- ๋๋ถ๋ถ์ ๋ด์ฉ์ setNeedsLayout()๊ณผ ๊ฐ๊ณ ์๋ ๋๊ฐ์ง์ ํต์ฌ์ ์ผ๋ก ์ฐจ์ด๊ฐ ์๋ค.
- receiver(์์ ์)์ ํ์ฌ ๋ ์ด์์์ ๋ฌดํจํํ๊ณ ,
ํธ์ถ ์ฆ์
๋ ์ด์์ ์ ๋ฐ์ดํธ๋ฅผ ํธ๋ฆฌ๊ฑฐํ๋ค. - ๋ฉ์๋๊ฐ ์์ฒญํ ์์
(View์ ๋ ์ด์์์ ๋ค์ ๊ทธ๋ฆฌ๋)์ด ๋ฐ๋ก ์ํ๋จ์ผ๋ก
๋๊ธฐ์
์ผ๋ก ์๋ํ๋ค.
๋ฒ์ธ - setNeedsLayout()์ย layoutIfNeeded()์ ์ฐจ์ด์ ์ถ์ฒ
UIView ํด๋์ค๋ ์ปจํ
์ธ ๋ฅผ ํ์ํ ๋, on-demand drawing model(์ฃผ๋ฌธํ ๋๋ก์ ๋ชจ๋ธ)
์ ์ฌ์ฉํ๋ค. ๋ง ๊ทธ๋๋ก ์ฃผ๋ฌธ์ ์ํด ๋์ํ๋ ๊ฑฐ๋ผ๊ณ ์๊ฐํ๋ฉด ๋ ๊ฒ ๊ฐ๋ค.
view๊ฐ ์ฒ์ ํ๋ฉด์ ๋ํ๋๋ฉด, ์์คํ
์ ์ปจํ
์ธ ๋ฅผ ๊ทธ๋ ค๋ฌ๋ผ๊ณ ์ฃผ๋ฌธ์ ๋ฃ๋๋ค. ๊ทธ๋ฌ๋ฉด ์์คํ
์ ์ปจํ
์ธ ์ ์ค๋
์ท์ ์บก์ณํ๊ณ , ํด๋น ์ค๋
์ท์ view์ ์๊ฐ์ ์ธ ํํ์ผ๋ก ์ฌ์ฉํ๋ค.
view์ ๋ด์ฉ์ด ๋ณ๊ฒฝ๋์ง ์์ผ๋ฉด view์ ๋๋ก์ ์ฝ๋๋ฅผ ๋ค์ ํธ์ถ ํ ์ ์๋ค. ๋ฐ๋๋ก ์ปจํ
์ธ ๊ฐ ๋ณ๊ฒฝ๋์๋ค๋ฉด view๊ฐ ๋ณ๊ฒฝ๋์์์ ์์คํ
์ ์๋ฆฌ๊ณ , view๊ฐ ๋ณ๊ฒฝ๋ ๋ด์ฉ์ ๋ฐ๋ผ drawing์ ์ํํ๋ฉด ๊ทธ ๊ฒฐ๊ณผ์ ์ค๋
์ท์ ์บก์ณํ๋ ํ๋ก์ธ์ค๋ฅผ ๋ฐ๋ณตํ๊ฒ ๋๋ค.
view๊ฐ ์ฒ์ ๋ํ๋๊ฑฐ๋ ์ผ๋ถ๋ฅผ ๋ค์ ๊ทธ๋ ค์ผํ๋ ๊ฒฝ์ฐ, iOS๋ view์ draw(_ rect:)
๋ฉ์๋๋ฅผ ํธ์ถํด์ view์๊ฒ ์ปจํ
์ธ ๋ฅผ ๊ทธ๋ ค๋ฌ๋ผ๊ณ ์์ฒญํ๋ค.
draw(_ rect:)
๋ฉ์๋๋ฅผ ํธ์ถ์ํฌ ์ ์๋ ํธ๋ฆฌ๊ฑฐ ์ด๋ฒคํธ๋ ์๋์ ๊ฐ๋ค.
- View๋ฅผ ๋ถ๋ถ์ ์ผ๋ก ๊ฐ๋ฆฌ๊ณ ์๋ ๋ค๋ฅธ view์ ์ด๋ ๋๋ ์ ๊ฑฐ
- hidden ํ๋กํผํฐ๋ฅผ false๋ก ์ค์ ํ์ฌ, ์ด์ ์ ์จ๊ฒจ์ง view๋ฅผ ๋ค์ ๋ณผ ์ ์๊ฒ ๋ง๋ค๊ธฐ
- view๋ฅผ ํ๋ฉด ๋ฐ์ผ๋ก ์คํฌ๋กค ํ ๋ค์, ํ๋ฉด์ผ๋ก ๋ค์ ์ด๋ํ๊ธฐ
- view์
setNeedsDisplay
๋๋setNeedsDisplayInRect(_:)
๋ฉ์๋๋ฅผ ๋ช ์์ ์ผ๋ก ํธ์ถํ๊ธฐ
์ง๊ธ๊น์ง setNeedsDisplay๋ setNeedsDisplayInRect(_:)๋ฅผ ํธ์ถํ์ง ์์๋๋ฐ ๋ทฐ๊ฐ ์ ๋๋ก ์ ๋ฐ์ดํธ ๋์๋ค๋ฉด ๊ทธ ์ธ 3๊ฐ์ง ์ผ์ด์ค์ ํด๋น๋์ด ๋ด๋ถ์ ์ผ๋ก ํธ์ถ์ด ๋์์ ๊ฒ์ด๋ค.
view์ ์
๋ฐ์ดํธ๋ ๋ฐ๋ก ์ด๋ฃจ์ด์ง๋ ๊ฒ์ด ์๋๋ผ drawing cycle์ด ๋์์์ ๋ ํ๊บผ๋ฒ์ ๋๋ค. ๋ฐ๋ผ์ ์ ์ค๋ช
์ฒ๋ผ, ํ์ฌ view์ ์ค๋
์ท์ ์บก์ณํด๋์๋ค๊ฐ ์ปจํ
์ธ ์ ๋ณ๊ฒฝ์ด ์ผ์ด๋์ ์์คํ
์๊ฒ ์
๋ฐ์ดํธ ์์ฒญ์ ํ๋ค๋ฉด ๋ค์ด์จ ์์ฒญ๋ค์ ์ฆ๊ฐ ๋ฐ์์ด ๋๋๊ฒ์ด ์๋๋ค. ๋ค์ drawing cycle์ด ๋์์์ ๋ ์ผ๊ด ์ฒ๋ฆฌ๊ฐ ์ด๋ฃจ์ด์ง๋ค. ๊ทธ๋ฆฌ๊ณ ์ด ๋, view์ ์
๋ฐ์ดํธ๋ฅผ draw(_ rect:)
๋ฉ์๋๋ฅผ ํธ์ถํ์ฌ ํ๋ค. ์ด ๋ฉ์๋๋ฅผ ํธ์ถ์ํฌ ์ ์๋ ํธ๋ฆฌ๊ฑฐ ์ด๋ฒคํธ๋ ์ 4๊ฐ์ง ๊ฒฝ์ฐ์ด๋ค.
์ถ๊ฐ์ ์ผ๋ก, draw(_ rect:)
๋ฉ์๋๋ ์ง์ ํธ์ถํด์๋ ์๋๋ค. ์ด ๋ฉ์๋๋ view ๊ฐ์ฒด๋ค์ด ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ผ๊ฐ ๋ค(viewDidLoad ์ดํ) ์ต์ด๋ก ํธ์ถ๋๋๋ฐ, ๋ง์ฝ ๊ทธ ์ดํ์ ํ์์ ์ํด ์ด ๋ฉ์๋๋ฅผ ํธ์ถํ๊ธฐ ์ํด์๋ setNeedsDisplay()
, setNeedsDisplayInRect(_:)
๋ฉ์๋๋ฅผ ํธ์ถํด์ผํ๋ค.