[iOS] view.layer์ ์ ์ฒด๋ฅผ ์ฐพ์์
UIView์ CALayer
์ง์ง ๋ฉด์ ์์ ์์ฃผ ๋ฐ๋ ์ง๋ฌธ์ธ UIVIew์ layer์ ์ฐจ์ด์ ๋ํด์ ๊ณต์๋ฌธ์๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๊ณต๋ถํด๋ณด๋ ค๊ณ ํด์. ์๋ํ๋ฉด ์ ๋ฐ ์ง๋ฌธ์ ๋ฐ์์ ๋ ๋จ ํ ๋ฒ๋ ๋ช ์พํ๊ฒ ๋ต๋ณ์ ํด๋ณธ ์ ์ด ์๋ ๊ฒ ๊ฐ์์์..
๋ธ๋ก๊ทธ๋ค์ ๋๋ฌ๋ณด๋ฉด UIView์์ layer๊ฐ ์ํด์ ธ์๊ณ ์ด๋ฐ๊ฑด ์ ์ค๋ช ๋์ด์๋๋ฐ, ๊ทผ๋ณธ์ ์ผ๋ก ๋ ๊ฐ๊ฐ ์ด๋ป๊ฒ ๋ค๋ฅธ์ง ์๋ฟ๋ ๊ธ์ด ์์ด์ ๊ณต์๋ฌธ์๋ฅผ ํ๋ฉด์ ํ ๋ฒ ์ ๋ฆฌํด๋ณด๋ ค๊ณ ํฉ๋๋ค.
๊ทธ๋ผ ์์ํ๊ฒ ์ต๋๋ค!
view.layer
๋จผ์ UIView๊ฐ ๊ฐ์ง๋ ํ๋กํผํฐ์ธ layer์ ๊ณต์๋ฌธ์๋ฅผ ๋ค์ฌ๋ค๋ณผ๊ฒ์.
์ค๋๋ ๋ด๋ฐฑํ ๊ณต์๋ฌธ์..ใ ใ ์ผ๋จ ์๋ก์ด ํค์๋์ธ Core Animation, Rendering ์ ์ฒดํฌํด๋๊ณ ๋ํ ์ผํ ์ค๋ช ์ ํ๋ฒ ํ์ธํด๋ณด์ฃ .
๋ํ ์ผ ํ๋ค์..ใ ใ ์ผ๋จ layer ํ๋กํผํฐ๋ ์ ๋ nil์ด ๋๋ฉด ์๋๋ค๊ณ ํฉ๋๋ค. layer ๊ฐ์ฒด์ ํด๋์ค๋ layerClass ํ๋กํผํฐ์์ ๋ฐํ๋ ๊ฐ์ ์ํด ๊ฒฐ์ ๋๊ณ view๋ ์ด ๋ ์ด์ด์ delegate๋ผ๊ณ ํฉ๋๋ค. ์ผ๋จ ๋ฌด์จ ๋ง์ธ์ง ์ ๋ชจ๋ฅด๊ฒ ๋๋ฐ ๋ชจ๋ฅด๋ ํค์๋๋ค์ด ๋ ๋์์ด์.
๋จผ์ 1) layerClass ํ๋กํผํฐ๊ฐ ์ด๋ค ํ๋กํผํฐ์ธ์ง ๋ด์ผํ ๊ฒ ๊ฐ๊ณ , 2) view๊ฐ layer์ ๋๋ฆฌ์๋ผ๋ ๋ง์ด ๋ฌด์์ธ์ง ํ์ธํด๋ด์ผํ ๊ฒ ๊ฐ์์.
๊ฒฝ๊ณ ์๋ ์ด๋ ๊ฒ ๋์์์ต๋๋ค. view๋ layer์ ๋๋ฆฌ์์ด๊ธฐ ๋๋ฌธ์ ๋ทฐ๊ฐ ๋ค๋ฅธ CALayer ๊ฐ์ฒด์ ๋๋ฆฌ์๊ฐ ๋๋ฉด ์๋๊ณ , layer์ delegate๋ฅผ ๋ค๋ฅธ ๊ฐ์ฒด๋ก ๋ฐ๊พธ์ง ๋ง๋ผ๊ณ ํ๋ค์. ์ด๊ฒ๋ ์์ง ์ ์ดํด๊ฐ ์๋์ง๋ง 2๋ฒ ๊ถ๊ธ์ฆ์ ๋ํ ํด๋ต์ ์ฐพ์ผ๋ฉด ์์ฐ์ค๋ฝ๊ฒ ํด๊ฒฐ๋ ๊ฒ ๊ฐ์ง ์๋์?
layerClass
๋จผ์ layer ๊ฐ์ฒด์ ํด๋์ค๋ฅผ ๊ฒฐ์ ํ๋ค๋ layerClass ํ๋กํผํฐ๋ถํฐ ํ์ธํด๋ด ์๋ค.
UIView ๋ฌธ์๋ฅผ ํ์ธํด๋ณด๋ฉด, ์ด๋ ๊ฒ UIView์ ํ๋กํผํฐ ์ค์ layerClass๋ผ๋ ํ์ ํ๋กํผํฐ๊ฐ ์๋ ๊ฒ์ ํ์ธํ ์ ์์์ด์. ์ค๋ช ์ ์ฝ์ด๋ณด๋ฉด ์ด ํด๋์ค์ ์ธ์คํด์ค์ ๋ํ layer๋ฅผ ๋ง๋๋ ํด๋์ค๋ฅผ ๋ฐํํ๋ค๊ณ ํฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ ์ค์ ๋ก ์ฝ๋๋ก ์ฐ์ด๋ณด๋ฉด CALayer๋ผ๋ ๊ฐ์ด ์ถ๋ ฅ๋๋ ๊ฒ ์ ์ ์์์ต๋๋ค. ์์ง ์ ์ดํด๊ฐ ์๋๋ ๋ฌธ์๋ฅผ ๋ ์์ธํ ์ฝ์ด๋ด์ผ๊ฒ ๋ค์ใ
๋ฌธ์๋ ์ข ๋ ์์ธํ ์ค๋ช ํด์ฃผ๊ณ ์๋๋ฐ์, ๋จผ์ ๋ฐํ ๊ฐ์ ๋ทฐ์ Core Animation layer๋ฅผ ์์ฑํ๋ ํด๋์ค๋ฅผ ๋ฐํํ๋ค๊ณ ํฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ default๋ก๋ CALayer ํด๋์ค๊ฐ ๋ฐํ๋์ฃ . ์ด ๋ฉ์๋๋ฅผ ์ค๋ฒ๋ผ์ด๋ํ๋ฉด ๋ค๋ฅธ ๋ ์ด์ด ํด๋์ค๋ฅผ ๋ฐํํ๋๋ก ํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด์ ํ์ฌ ๋ทฐ๊ฐ ํฐ ์คํฌ๋กค ์์ญ์ ๋ํด ํ์ผ๋ง์ ์ฌ์ฉํด์ผ ํ๋ค๋ฉด ์ด ๋ฉ์๋๋ฅผ ์ค๋ฒ๋ผ์ด๋ํด์ CATiledLayer๋ฅผ ๋ฐํํ๊ฒ ํ ์ ์์ต๋๋ค!
CATiledLayer์ ๋ํด์ ์งง๊ฒ ์ฐพ์๋ดค๋๋ฐ, ์ฐ๋ฆฌ๊ฐ ์ฌ์ฉํ๋ ์ง๋ ์ฑ ๊ฐ์ ๊ฒฝ์ฐ๋ ์ ์ฒด ํ๋ฉด์ ๋ค ๊ทธ๋ ค๋๊ณ ์คํฌ๋กค ์ํค๋ ๊ฒ์ด ์๋๋ผ ์ปจํ ์ธ ๋ฅผ ํ์ฅ์ค ํ์ผ์ฒ๋ผ ๋ค๋ชจ์นธ์ผ๋ก ๋๋์ด๋๊ณ ๊ฐ๊ฐ lazyํ๊ฒ ๋ก๋ฉ ํ๋ค๊ณ ํฉ๋๋ค. ์ด๋ด ๋ ์ฌ์ฉํ๋ layer๊ฐ CALayer์ ์๋ธ ํด๋์ค์ธ CATiledLayer๋ผ๊ณ ํ๋ค์. ๊ฒฐ๊ตญ ์ด๋ค ํน์ํ ๋ชฉ์ ์ ๋ ์ด์ด๊ฐ ํ์ํ ๋๋ ์ค๋ฒ๋ผ์ด๋ฉ์ผ๋ก ํด๋น ๋ ์ด์ด๊ฐ ๋ฐํ๋๊ฒ ๋ง๋ค๋ฉด ๋๋ค๋๊ฑฐ์ฃ .
๊ทธ๋ฆฌ๊ณ ์ด ๋ฉ์๋๋ ๋ทฐ๋ฅผ ์ฒ์ ๋ง๋ค ๋ ๋ทฐ์ ๋์๋๋ layer ๊ฐ์ฒด๋ฅผ ๋ง๋ค๊ธฐ ์ํด ํ ๋ฒ ๋ถ๋ฆฌ๋ ๋ฉ์๋๋ผ๊ณ ํฉ๋๋ค.
์ ๋ฆฌ - layerClass
์ค์ผ์ด ๊ทธ๋ผ ์ง๊ธ๊น์ง ์์๋ณธ ๋ด์ฉ์ ์ ๋ฆฌํด๋ด ์๋ค.
1) UIView๋ layer ํ๋กํผํฐ๋ฅผ ๊ฐ์ง๊ณ ์๋ค.
2) layer๋ ๋ทฐ๋ฅผ ๋ง๋ค๋ฉด์ ๊ฐ์ด ๋ง๋ค์ด์ง๊ณ layerClass ํ์ ํ๋กํผํฐ๋ฅผ ํตํด ์ด๋ค ์ข ๋ฅ์ layer๋ฅผ ์์ฑํ ์ง ๊ฒฐ์ ๋๋ค.
3) layerClass๋ ๊ธฐ๋ณธ ๊ฐ์ผ๋ก CALayer๋ฅผ ๊ฐ์ง๊ณ ์๊ณ , ์ด ํ๋กํผํฐ๋ฅผ ์ค๋ฒ๋ผ์ด๋ฉํ๋ฉด ์ํ๋ layer๋ฅผ ๋ฐํํ๊ฒ ํ ์๋ ์๋ค.
view๋ layer์ delegate
๊ทธ๋ผ ์ด์ ๋๋ฒ์งธ ๊ถ๊ธ์ฆ์ด์๋ view๋ layer์ delegate๊ฐ ์ด๋ค ์๋ฏธ์ธ์ง ์์๋ด ์๋ค!
๊ทผ๋ฐ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ค๋ฉด ์ผ๋จ layer๊ฐ ์ด๋ค ๋ ์์ธ์ง ๋ถํฐ ์์์ผํ ๊ฒ ๊ฐ๋ค์. layer๋ก ์ ์ ๋์ด๊ฐ๋ค๊ฐ ์ด ๋ช ์ ๋ก ๋์์ค๋๊ฒ ์ข์ ๊ฒ ๊ฐ์ต๋๋ค.
CALayer
์๊น layer์ ํ์ ์ด CALayer์์ฃ ?
๊ทธ๋ฆฌ๊ณ ์ฌ๊ธฐ์ ์ฒ์๋ง๋ฌ๋ ์ฉ์ด์ธ Core Animation๊ณผ rendering๋ ์ดํดํด๋ณด๋ ๊ฒ์ ๋ชฉํ๋ก ํด๋ณด์๊ตฌ์.
์ผ๋จ CALayer์ ์ ์๋ก ๋์ด๊ฐ๋ณด๊ฒ ์ต๋๋ค.
์ผ๋จ NSObject๋ฅผ ์์๋ฐ๊ณ ์์ผ๋ ์ต์์ ํ์ ์ด๊ฒ ๋ค์. ์ค๋ช ์ ์ฝ์ด๋ณด๋ฉด CALayer๋ ์ด๋ฏธ์ง ๊ธฐ๋ฐ์ ์ปจํ ์ธ ๋ฅผ ๊ด๋ฆฌํ๊ณ ํด๋น ์ปจํ ์ธ ๋ค์ ์ ๋๋ฉ์ด์ ์ ์ ์ฉํ ์ ์๋๋ก ํด์ฃผ๋ ๊ฐ์ฒด๋ผ๊ณ ํฉ๋๋ค. ์ญ์ ์ด๋ฒ์๋ ์ถ์์ ์ด์์..
๋ํ ์ผํ ์ค๋ช ์ผ๋ก ๋์ด์ค๊ฒ ์ต๋๋ค.
๋จผ์ ๋ ์ด์ด๋ ์ฃผ๋ก ๋ทฐ์ backing store๋ฅผ ์ ๊ณตํ๋ ์ฉ๋๋ก ์ฌ์ฉํ์ง๋ง ์ด๋ค ๊ฒฝ์ฐ์๋ ๋ทฐ๊ฐ ์์ด๋ ์ปจํ ์ธ ๋ฅผ ํ์ํ๊ธฐ ์ํด ์ฌ์ฉ๋ ์๋ ์๋ค๊ณ ํฉ๋๋ค. ๋ ์ด์ด์ ์ฃผ์ํ ์๋ฌด๋ ๊ฐ๋ฐ์๊ฐ ์ ๊ณตํ๋ ์๊ฐ์ ์ธ ์ปจํ ์ธ ๋ฅผ ๊ด๋ฆฌํ๋ ๊ฒ์ด์ง๋ง ๋์์ ๋ ์ด์ด ์ค์ค๋ก๊ฐ ๊ฐ์ง๊ณ ์๋ ์๊ฐ์ ์ธ ์์ฑ๋ค๋ ์์ด์. ์๋ฅผ ๋ค๋ฉด ๋ฐฐ๊ฒฝ์์ด๋ ํ ๋๋ฆฌ ๊ด๋ จ ์์ฑ, ๊ทธ๋ฆผ์ ์์ฑ ๊ฐ์ด์.
๋ ์ด์ด์ ์๋ฌด๊ฐ ์๊ฐ์ ์ธ ์ปจํ ์ธ ๋ฅผ ๊ด๋ฆฌํ๋ ๊ฒ์ด๋ผ๊ณ ํ๋๋ฐ์, ์ด๋ฅผ ์ํด์ ๋ ์ด์ด๋ ์ปจํ ์ธ ์ ์์น, ์ฌ์ด์ฆ, ๋ณํ ์ ๋ณด๋ค์ ๋ณด๊ดํฉ๋๋ค. ์ด๋ ๊ฒ ๋ ์ด์ด๊ฐ ๊ฐ์ง๊ณ ์๋ ์ ๋ณด๋ค์ ๋ณ๊ฒฝํ๋ฉด ์ ๋๋ฉ์ด์ ์ ์ฌ์ฉํ ์ ์๊ฒ ๋์ฃ .
๋ ์ด์ด ๊ฐ์ฒด๋ ๋ ์ด์ด์ ์๋๊ฐ ์ ๋๋ฉ์ด์ ์๊ฐ, ์ ๋๋ฉ์ด์ ์ ๋ณด๋ฅผ CAMediaTiming ํ๋กํ ์ฝ์ ์ฑํํ๋ ๊ฒ์ผ๋ก ์บก์ํํด์. ์ด ํ๋กํ ์ฝ์ ๋ ์ด์ด๊ฐ ๊ฐ์ง๋ ์๊ฐ์ ๋ณด๋ฅผ ์ฌ์ฉํ ์ ์๋๋ก ํ์ฃ .
๋ ์ด์ด ๊ฐ์ฒด๊ฐ ๋ทฐ์ ์ํด ์์ฑ๋๋ฉด, ๋ทฐ๋ ์๊ธฐ ์์ ์ ๋ ์ด์ด์ ๋๋ฆฌ์๋ก ๋ง๋ค๊ฒ ๋ฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ฐ๋ฐ์๋ ์ด ๊ด๊ณ๋ฅผ ์ ๋๋ก ๋ณ๊ฒฝํ๋ฉด ์๋ฉ๋๋ค.
๋ง์ฝ ๋ ์ด์ด๋ฅผ ๋ทฐ๋ฅผ ํตํด์๊ฐ ์๋๋ผ ์ง์ ๋ง๋ค์๋ค๋ฉด delegate์ ์ด๋ค ๊ฐ์ฒด๋ฅผ ํ ๋นํด์ ์ํ๋๋๋ก ๋ ์ด์ด๋ฅผ ์กฐ์ํ ์ ์์ต๋๋ค.
๋ง์ง๋ง์ผ๋ก ๋ ์ด์ด๋ ๋ ์ด์์์ ๊ด๋ฆฌํ๋ ๊ฐ์ฒด๋ฅผ layoutManager ํ๋กํผํฐ์ ํ ๋นํ๊ณ ๋ ์ด์ด์ ํ์ ๋ทฐ๋ค์ ๋ณ๋๋ก ๊ด๋ฆฌํ๊ฒ ํ ์๋ ์์ต๋๋ค.
์ ๋ฆฌ - CALayer
์๋ก์ด ์ ๋ณด๋ค์ด ๋ฐ๋ ค๋๋๋ฐ์.. ์ ๋ฆฌ๋ฅผ ํ ๋ฒ ํด๋ด ์๋ค.
1) ๋ ์ด์ด์ ์ฉ๋๋ ์ฃผ๋ก backing store์ด์ง๋ง ๋ทฐ ์์ด ์ปจํ ์ธ ๋ฅผ ๊ทธ๋ฆด ๋ ์ฌ์ฉํ ์๋ ์๋ค.
2) ๋ ์ด์ด์ ์ฃผ์ํ ์ญํ ์ ์๊ฐ์ ์ธ ์ปจํ ์ธ ๋ฅผ ๊ด๋ฆฌํ๋ ๊ฒ์ด๋ค. ์์ฒด์ ์ผ๋ก ๋ฐฐ๊ฒฝ์์ด๋ ํ ๋๋ฆฌ ๊ฐ์ ์๊ฐ์ ์ธ ์์ฑ์ ๊ฐ์ง๊ณ ์๊ธฐ๋ ํ๋ค.
3) ๋ ์ด์ด๋ ์ปจํ ์ธ ์ ํฌ๊ธฐ, ์์น, ๋ณํ ์ ๋ณด๋ฅผ ๋ณด๊ดํ๋ค. ์ด ๊ฐ๋ค์ ๋ณ๊ฒฝํ๋ ๊ฒ์ ํตํด์ ์ ๋๋ฉ์ด์ ์ด ๋ง๋ค์ด์ง๋ค.
4) ๋ทฐ๋ ๋ ์ด์ด๋ฅผ ๋ง๋ค๋ฉด์ ์๋์ผ๋ก ์๊ธฐ์์ ์ ๋ ์ด์ด์ delegate๋ก ํ ๋นํ๋ค. ๊ทธ๋ฆฌ๊ณ ์ด ๊ด๊ณ๋ ์ ๋๋ก ๋ณ๊ฒฝํ๋ฉด ์๋๋ค.
layoutManager๋ CAMediaTiming ํ๋กํ ์ฝ์ ๋ ๊น๊ฒ ๊ฐ์ง ์๊ณ ์๋ ์๊ณ ์ ํ๋ CALayer์ view๋ layer์ delegate์ ์ง์คํด๋ณด๊ฒ ์ต๋๋ค.
Core Animation
๋ ์ด์ด๊ฐ backing store๋ผ๋ ๋ง๋ ์ ๋ชจ๋ฅด๊ฒ ๊ณ , ๋ทฐ์์ ๊ด๊ณ๋ ํ์คํ ๋ชจ๋ฅด๊ฒ ์ด์ Core Animation ๋ฌธ์๋ฅผ ๋ค์ฌ๋ค๋ณด์์ต๋๋ค.
์ฝ์ด ์ ๋๋ฉ์ด์ ์ ํ๋ ์์ํฌ์ด๋ค์. ์ฝ์ด ์ ๋๋ฉ์ด์ ์ CPU์ ๋ถ๋ด์ ์ฃผ๊ฑฐ๋ ์ฑ์ ๋๋ฆฌ๊ฒ ํ์ง ์๊ณ ๋์ ํ๋ ์๊ณผ ๋ถ๋๋ฌ์ด ์ ๋๋ฉ์ด์ ์ ์ ๊ณตํ๋ค๊ณ ํฉ๋๋ค. ์ ๋๋ฉ์ด์ ์ ์ฌ์ฉํ์ ๋ ๊ทธ๋ ค์ง๋ ๊ฐ ํ๋ ์๋ค์ ์ฝ์ด ์ ๋๋ฉ์ด์ ์์ ๋ค ํด์ค๋ค๊ณ ํ๋ค์.
๊ฐ๋ฐ์๊ฐ ํ ์ผ์ ์ ๋๋ฉ์ด์ ์ด ์ด๋ ์ง์ ์์ ์์ํด์ ์ด๋ ์ง์ ์์ ๋๋๋์ง์ ๊ฐ์ ํ๋ผ๋ฏธํฐ๋ฅผ ์ ํด์ฃผ๋ ๊ฒ์ด๊ณ , ๊ทธ ์ธ์ ๋ชจ๋ ์ผ๋ค์ ์ฝ์ด ์ ๋๋ฉ์ด์ ์์ ๋์ ํด์ฃผ๊ฒ ๋ฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ ๋๋ง์ ๊ฐ์ํ๊ธฐ ์ํด์ ๊ทธ๋ํฝ ํ๋์จ์ด(GPU๋ฅผ ๋งํ๋ ๊ฒ์ด๊ฒ ์ฃ !)๋ฅผ ์ฌ์ฉํฉ๋๋ค.
์คํค.. ์ผ๋จ ์ฝ์ด ์ ๋๋ฉ์ด์ ์ ํ๋ ์์ํฌ๋ผ๋ ๊ฒ, ๊ทธ๋ฆฌ๊ณ GPU๋ฅผ ์ด์ฉํด์ ๋ ๋๋ง์ ๊ฐ์ํํ๊ณ ๋ถ๋๋ฌ์ด ํ๋ ์๊ณผ ์ ๋๋ฉ์ด์ ์ ์ง์ํ๋ ๊ฒ๊น์ง ์๊ฒ๋์์ต๋๋ค.
๊ฐ์ด๋ ๋ฌธ์์์ ๋ ์์ธํ ํ์ธํ๋ผ๊ณ ํ๋ ๋ค์ด๊ฐ๋ด ์๋ค.
์ฝ์ด์ ๋๋ฉ์ด์ ์ ๋ํด์ ๋ ์์ธํ ์ค๋ช ํด์ฃผ๊ณ ์๋ค์! ๋์ ๋๋ ๋ฌธ์ฅ์ด ์๋๋ฐ, ์ฝ์ด ์ ๋๋ฉ์ด์ ์ ์ฑ์ ๋ทฐ๋ฅผ ๋์ฒดํ ์ ์๋ค๊ณ ํฉ๋๋ค. ๋์ ์ฝ์ด ์ ๋๋ฉ์ด์ ์ ๋ทฐ๊ฐ ๊ฐ์ง ์ปจํ ์ธ ์ ์ ๋๋ฉ์ด์ ์ ๋ ์ข์ ์ฑ๋ฅ์ผ๋ก ์ ๊ณตํ๊ธฐ ์ํ ๊ธฐ์ ์ด๋ผ๊ณ ํด์.
์ ๋์ฒดํ ์ ์๋์ง๋ ๋์์๋๋ฐ์, ๋ ์ด์ด๋ ํจ๊ณผ์ ์ผ๋ก ๋ทฐ์ ์ ๋๋ฉ์ด์ ์ ๋ณด์ฌ์ฃผ๊ธฐ ์ํ ์ธํ๋ผ๋ฅผ ์ ๊ณตํด์ฃผ๋ ๊ฒ์ด๊ณ ์ด๋ฒคํธ๋ฅผ ๋ฐ๊ฑฐ๋, ์ง์ ์ปจํ ์ธ ๋ฅผ ๊ทธ๋ฆฌ๊ฑฐ๋, ๋ฆฌ์คํฐ๋ ์ฒด์ธ์ ์ฐธ์ฌํ๋๊ฒ ๋ถ๊ฐ๋ฅํด์. ๊ทธ๋์ ์ฌ์ฉ์ ์ธํฐ๋ ์ ์ ํญ์ ๋ทฐ๋ก ๋ฐ์์ผํ๊ธฐ ๋๋ฌธ์ ์ฑ์์๋ ๋ฐ๋์ ์ ์ด๋ ํ ๊ฐ ์ด์์ ๋ทฐ๊ฐ ํ์ํ๊ฑฐ์ฃ .
๊ณ์ํด๋ณด๋ฉด, ๋ ์ข์ ์ฑ๋ฅ์ ๋ด๊ธฐ ์ํด์ ์ฝ์ด ์ ๋๋ฉ์ด์ ์ ๋ทฐ๊ฐ ๊ฐ์ง๊ณ ์๋ ์ปจํ ์ธ ๋ค์ ๋นํธ๋งต์ผ๋ก ๋ฐ๊ฟ์ ์บ์ฑํ๊ณ , ๋นํธ๋งต์ด๊ธฐ ๋๋ฌธ์ GPU์์ ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅํด์ง๋๋ค.
์ํ! ์๊น backing store๊ฐ ๋ง์ด ์ปจํ ์ธ ๋ฅผ ์บ์ฑํ๋ค๋ ์๋ฏธ์๊ตฐ์! ๊ทธ๋ฆฌ๊ณ GPU๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์ ์ปจํ ์ธ ๋ฅผ ๋นํธ๋งต์ผ๋ก ๋ณํํ๊ตฌ์.
์บ์ฑ๋ ๋ฐ์ดํฐ๋ฅผ ๋ค์ ํ๋ฉด์ ๋ณด์ฌ์ฃผ๊ธฐ ์ํด์ ์ด๋ป๊ฒ ํด์ผํ ์ง ๊ณ ๋ฏผ์ด ๋ค๊ฒ ์ง๋ง ๋๋ถ๋ถ์ ๊ฒฝ์ฐ์๋ ์ ํฌ๊ฐ ์ธ์งํ์ง ๋ชปํ ๋ฟ์ด์ง ์ฝ์ด ์ ๋๋ฉ์ด์ ์ด ๋ชจ๋ ๊ฒ์ ๋ค ํด์ฃผ๊ณ ์๋ค๊ณ ํฉ๋๋ค.
๋ ์ฝ์ด๋ณผ๊ฒ์!
์ฐ๋ฆฌ๋ ์ฝ์ด ์ ๋๋ฉ์ด์ ์ ์ฑ์ ๋ทฐ๋ ์๊ฐ์ ์ธ ๊ฐ์ฒด๋ค์ ๋ณ๊ฒฝ์ ์ ๋๋ฉ์ด์ ์ผ๋ก ๋ง๋ค๊ธฐ ์ํด ์ฌ์ฉํด์. ์ฌ๊ธฐ์ ๋งํ๋ ๋ณ๊ฒฝ์ ๋๋ถ๋ถ ์๊ฐ์ ์ธ ์์๋ค์ ํ๋กํผํฐ๋ฅผ ์์ ํ๋ ๊ฒ์ ์๋ฏธํด์. ์๋ฅผ ๋ค์ด์ ๋ทฐ์ ์์น, ํฌ๊ธฐ, ํฌ๋ช ๋๋ฅผ ์ ๋๋ฉ์ด์ ๊ณผ ํจ๊ป ๋ณ๊ฒฝํ ๋ ์ฝ์ด ์ ๋๋ฉ์ด์ ์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์๋ก์ด ๊ฐ์ ์ง์ ํ๋ฉด ์ฝ์ด ์ ๋๋ฉ์ด์ ์ด ๊ธฐ์กด ๊ฐ๊ณผ ์๋ก์ด ๊ฐ์ ๊ฐ์ง๊ณ ์ ๋๋ฉ์ด์ ์ ๋ง๋ค๊ฒ ๋ฉ๋๋ค.
๋งํ ์ฑ์ฒ๋ผ 1์ด์ ์ปจํ ์ธ ๋ฅผ 60๋ฒ ๋ณ๊ฒฝํ๋ ๋ชฉ์ ์ผ๋ก ์ฝ์ด์ ๋๋ฉ์ด์ ์ ์ฌ์ฉํ๋ ๊ฒ์ ์ ํฉํ์ง ์์์. ๋์ ์ฝ์ด ์ ๋๋ฉ์ด์ ์ ๋ทฐ๋ฅผ ํ๋ฉด ๋ด์์ ์ด๋์ํค๊ฑฐ๋ ํ์ด๋ ์์/์ธ ์ํค๋ ๊ฒฝ์ฐ์๋ ์ฌ์ฉํ ์ ์์ฃ .
์ผ๋จ ๋ทฐ์ ์๊ฐ์ ์ธ ์์๋ค์ ๋ณ๊ฒฝํ๋ฉด์ ์ ๋๋ฉ์ด์ ์ ์ ์ฉํ ๋ ์ฝ์ด ์ ๋๋ฉ์ด์ ์ ์ ์ฉํ ๊ฒ ์ธ ์ ์๋ค๊ณ ์ดํดํ๊ณ ๋์ด๊ฐ๊ฒ ์ต๋๋ค.
๋ค์์ ๋ ์ด์ด์์ ์ปจํ ์ธ ๋ฅผ ๊ทธ๋ฆฌ๋ ๊ฒ๊ณผ ๊ด๋ จ๋ ๋ด์ฉ์ด์์.
๋ ์ด์ด๋ค์ ๋๋ถ๋ถ ์ค์ ๋ก ํ๋ฉด์ ๊ทธ๋ฆฌ๋ ์ผ์ ๋ด๋นํ์ง๋ ์์์. ๋์ ์๊น ์ค๋ช ํ๋ ๊ฒ ์ฒ๋ผ ์ปจํ ์ธ ๋ค์ ์บก์ณํ๊ณ ์ด๊ฑธ ๋นํธ๋งต์ผ๋ก ๋ง๋ค์ด์ backing store์ ์บ์ฑํด๋์ฃ .
๋ง์ฝ ๋ ์ด์ด๊ฐ ๊ฐ์ง ํ๋กํผํฐ์ ๋ณ๊ฒฝ์ด ์๊ธฐ๋ฉด ๋ ์ด์ด ๊ฐ์ฒด์ ์ํ๋ฅผ ๋ณ๊ฒฝํ๊ฒ ๋ฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ด ๋ณ๊ฒฝ์ด ์ ๋๋ฉ์ด์ ์ ์คํ์ํค๊ฒ ๋๋ฉด ์ฝ์ด ์ ๋๋ฉ์ด์ ์ ํด๋น ๋ ์ด์ด์ ๋นํธ๋งต๊ณผ ์ํ์ ๋ณด๋ฅผ GPU์ ๋ณด๋ด๊ณ , GPU๊ฐ ์ด ์ ๋ณด๋ฅผ ๋ฐํ์ผ๋ก ์๋ก์ด ์๋ก์ด ๋นํธ๋งต์ ๊ทธ๋ฆฌ๊ฒ ๋ฉ๋๋ค.
์ด๋ ๊ฒ ๊ทธ๋ฆผ์ด ์ ๊ณต๋์ด ์๋๋ฐ์, ์ฑ์ ๊ทธ๋ฆผ์ด ๊ทธ๋ ค์ง๋ฉด ๋ ์ด์ด์ backing store์ ๋นํธ๋งต์ผ๋ก ์บ์ฑ๋๊ณ , ๊ทธ๋ฆผ์ ํ์ ์ํค๋ ์ ๋๋ฉ์ด์ ์ด ์์๋๋ฉด ๋นํธ๋งต๊ณผ ์ํ์ ๋ณด๊ฐ ์ฝ์ด ์ ๋๋ฉ์ด์ ์์ GPU๋ก ๋์ด๊ฐ GPU๋ ์๋กญ๊ฒ ๋นํธ๋งต์ ๊ทธ๋ฆฌ๊ฒ ๋ฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ด ๋นํธ๋งต์ด ๋ค์ ๋ทฐ๊ฐ ๋์ด์ ์ฑ์ ๋ณด์ฌ์ง๊ฒ ๋๋๊ฑฐ์ฃ .
๋นํธ๋งต์ ๋ค๋ฃจ๊ธฐ ๋๋ฌธ์ ์ ํฌ๊ฐ ์ผ๋ฐ์ ์ผ๋ก ์๊ฐํ๋ ๋ทฐ์์ ์ปจํ ์ธ ๊ฐ ๊ทธ๋ ค์ง๋ ๊ฒ๊ณผ๋ ์กฐ๊ธ ๋ค๋ฅด๊ฒ ์ฃ ?
๋ทฐ์์ ์ปจํ ์ธ ๋ฅผ ๊ทธ๋ฆด ๋๋ draw(rect:) ๋ฉ์๋๋ฅผ ํธ์ถํ๊ฒ ๋๋๋ฐ์, ์ด๋ ์๋กญ๊ฒ ๋ทฐ๋ฅผ ๊ทธ๋ฆฌ๊ธฐ ์ํด์ ๋ฉ์ธ ์ค๋ ๋์ CPU๋ฅผ ์ฌ์ฉํ๊ฒ ๋ฉ๋๋ค. ํ์ง๋ง ์ฝ์ด ์ ๋๋ฉ์ด์ ์ ๋นํธ๋งต์ ๋ค๋ฃจ๊ธฐ ๋๋ฌธ์ GPU์์ ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅํ๊ณ , ์ด ๋๋ฌธ์ ๋ทฐ์์ ์ปจํ ์ธ ๋ฅผ ๊ทธ๋ฆฌ๋ ๊ฒ๋ณด๋ค ๋น์ฉ์ด ๋ ์ ๊ฒ๋ค๊ฒ ๋ฉ๋๋ค.
์ ๋ฆฌ - Core Animation
์ฝ์ด ์ ๋๋ฉ์ด์ ์ ๋ํด์ ๊ธฐ๋ณธ์ ์ธ ๊ฐ๋ ์ ์กํ ๊ฒ ๊ฐ์์ ์ ๋ฆฌํ๊ณ ๋์ด๊ฐ๋ณผ๊ฒ์.
1) ์ฝ์ด ์ ๋๋ฉ์ด์ ์ด ํ๋ ์ผ์ ์ปจํ ์ธ ์ ์ ๋๋ฉ์ด์ ์ ๋ถ๋๋ฝ๊ฒ ๋ณด์ฌ์ฃผ๋ ๊ฒ
2) backing store์ ๋ทฐ์ ์ปจํ ์ธ ๋ฅผ ๋นํธ๋งต์ผ๋ก ๋ฐ๊ฟ์ ์บ์ฑํ๋ค.
3) ์ ๋๋ฉ์ด์ ์ ์์ํ ๋๋ ์บ์ฑํด๋ ๋นํธ๋งต๊ณผ ์ํ๋ฅผ GPU์ ์ ๋ฌํ๊ณ GPU๊ฐ ์๋ก์ด ๋นํธ๋งต์ ๋ง๋ค์ด๋ธ๋ค.
4) view์์ ์ปจํ ์ธ ๋ฅผ ๊ทธ๋ฆฌ๋ฉด ๋ฉ์ธ์ค๋ ๋์์ CPU๋ก draw ๋ฉ์๋๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ๋๋ฌธ์ ๋น์ฉ์ด ํฌ์ง๋ง layer๋ GPU๋ฅผ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ๋น์ฉ์ด ํฌ์ง ์๋ค.
๊ทธ๋์ view๋ layer๋ ๋ฌด์จ ๊ด๊ณ๋๊ตฌ..
ํด ์ด์ ์ง์ง ๋ง์ง๋ง์ผ๋ก view ๋ layer์ ๊ด๊ณ, delegate๊ฐ ์ด๋ค ์๋ฏธ์ธ์ง ์ฐพ์๋ณด๊ฒ ์ต๋๋ค.
๋ ์ด์ด์ ์ปจํ ์ธ ๋ฅผ ์ด๋ป๊ฒ ์ ๊ณตํ๊ฒ ๋๋์ง์ ๋ํ ์๋ฃ๊ฐ ์์ด์ ํ๋ฒ ์ฝ์ด๋ณผ๊ฒ์.
์ด์จ๋ ์ค์ ๋ก ์ปจํ ์ธ ๋ฅผ ๋ณด์ฌ์ฃผ๊ณ ์๋๊ฑด ์ฑ์ ํ๋ฉด์ด๊ณ ๋ ์ด์ด๋ ์ด ์ปจํ ์ธ ๋ฅผ ๋นํธ๋งต์ผ๋ก ๊ฐ์ ธ์ผ ํ์ฃ . ๋ ์ด์ด์ ๋นํธ๋งต์ผ๋ก ์ปจํ ์ธ ๋ฅผ ์ ๊ณตํ ์ ์๋ ๋ฐฉ๋ฒ์ด ์ธ ๊ฐ์ง๊ฐ ์๋ค๊ณ ํฉ๋๋ค.
1) ๋ ์ด์ด ๊ฐ์ฒด์ contents ํ๋กํผํฐ์ ์ด๋ฏธ์ง ๊ฐ์ฒด๋ฅผ ํ ๋นํ๋ค. ๋ง์ฝ ๋ ์ด์ด๊ฐ ๊ฐ์ง ์ปจํ ์ธ ๊ฐ ๋ฐ๋ ์ผ์ด ๋ณ๋ก ์์ผ๋ฉด ์ด ๋ฐฉ๋ฒ์ด ๊ฐ์ฅ ์ข๋ค๊ณ ํ๋ค์.
2) ๋๋์ด... ๋ ์ด์ด์ delegate ๊ฐ์ฒด๋ฅผ ์ฃผ์ด์ ํด๋น ๊ฐ์ฒด๊ฐ ๋ ์ด์ด์ ์ปจํ ์ธ ๋ฅผ ๊ทธ๋ฆฌ๊ฒ ํ ์ ์์ต๋๋ค. ์ด ๋ฐฉ๋ฒ์ ๋ ์ด์ด์ ์ปจํ ์ธ ๋ค์ ์ฃผ๊ธฐ์ ์ผ๋ก ๋ฐ๋๊ณ ๋ทฐ์ ๊ฐ์ ์ธ๋ถ ๊ฐ์ฒด์์ ์ปจํ ์ธ ๊ฐ ์ ๊ณต๋ ๋ ์ฌ์ฉํ๊ธฐ์ ์ข์ ๋ฐฉ๋ฒ์ด๋ผ๊ณ ํฉ๋๋ค.
3) ๋ ์ด์ด์ ์๋ธํด๋์ค๋ฅผ ๋ง๋ค๊ณ ์ปจํ ์ธ ๋ฅผ ๊ทธ๋ฆฌ๋ ๋ฉ์๋๋ฅผ ์ค๋ฒ๋ผ์ด๋ฉํด์ ์ปจํ ์ธ ๋ฅผ ์ ๊ณตํ ์ ์์ต๋๋ค. ์ด ๋ฐฉ๋ฒ์ ๋ ์ด์ด์ ์ปจํ ์ธ ๋ฅผ ๊ทธ๋ฆฌ๋ ์์ ์ ๋ณ๊ฒฝํ๊ณ ์ถ์ ๋ ์ฌ์ฉํ ์ ์๋ค๊ณ ํฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ ๋ทฐ์ ๋ ์ด์ด๊ฐ ํฌํจ๋์ด ์๋ ๊ฒฝ์ฐ์๋ ์ด๋ฐ ๋ฐฉ๋ฒ๋ค์ ๋ํด์ ๊ณ ๋ฏผํ ํ์๊ฐ ์๋ค๊ณ ํฉ๋๋ค. ์๋์ ์ผ๋ก ๊ฐ์ฅ ์ ์ ํ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ค๊ณ ํ๋ค์.
์ผ๋จ ์ ํฌ๊ฐ ๊ถ๊ธํดํ๋๊ฒ 2๋ฒ์งธ ๋ฐฉ๋ฒ์ด๋๊น ํด๋น ๋ฐฉ๋ฒ์ ๋ํ ๊ตฌ์ฒด์ ์ธ ์ค๋ช ์ ํ์ธํด๋ณผ๊ฒ์.
๋ง์ฝ ๋ ์ด์ด์ ์ปจํ ์ธ ๊ฐ ์์ฃผ ๋ฐ๋๋ค๋ฉด ์ปจํ ์ธ ๊ฐ ๋ฐ๋๋๋ง๋ค ์ปจํ ์ธ ๋ฅผ ์ ๊ณตํด์ค ์ ์๋ ๊ฐ์ฒด๋ฅผ delegate๋ก ๋ง๋ค๋ผ๊ณ ํฉ๋๋ค. ํ๋ฉด์ display๋๋ ์์ ์ ๋ ์ด์ด๋ ์๋ก์ด ์ปจํ ์ธ ๋ฅผ ์ป๊ธฐ ์ํด ๋ ๋ฉ์๋๋ฅผ ํธ์ถํ๋ค๊ณ ํด์.
1) ๋ง์ฝ delegate์ display(layer:) ๊ฐ ๊ตฌํ๋์ด ์์ผ๋ฉด, ์ด ๊ตฌํ์ ๋นํธ๋งต์ ์์ฑํด์ ๋ ์ด์ด์ contents ํ๋กํผํฐ์ ํ ๋นํ๋ ์์ ์ ์ํํด์ฃผ์ด์ผ ํ๋ค๊ณ ํฉ๋๋ค.
2) ๋ง์ฝ delegate์ draw(layer: inContext:) ๋ฉ์๋๊ฐ ๊ตฌํ๋์ด ์์ผ๋ฉด ์ฝ์ด ์ ๋๋ฉ์ด์ ์ ๋นํธ๋งต์ ์์ฑํ๊ณ ๋นํธ๋งต์ ๊ทธ๋ฆด ๋ด์ฉ(graphics context)๋ค์ ์์ฑํ ๋ค์ ์ด ๋ฉ์๋๋ฅผ ํธ์ถํด์ ๋นํธ๋งต์ ์ฑ์ฐ๊ฒ ๋ฉ๋๋ค. ์ด ๋ฉ์๋์์ ๊ตฌํํด์ผํ ๋ด์ฉ์ ์ ๋ฌ๋ฐ์ graphics context์ ์ปจํ ์ธ ๋ฅผ ๊ทธ๋ฆฌ๋ ๊ฒ์ด์ฃ .
Delegate ๊ฐ์ฒด๋ ๋ฐ๋์ ๋ ๋ฉ์๋ ์ค ํ๋๋ฅผ ๊ตฌํํ๊ณ ์์ด์ผ ํด์. ๋ง์ฝ ๋ ๋ค ๊ตฌํ๋์ด ์๋ค๋ฉด display(layer:)๋ฉ์๋๊ฐ ์ฌ์ฉ๋๋ค๊ณ ํฉ๋๋ค.
์ด delegate๋ ํ๋กํ ์ฝ๋ก ์ ์๊ฐ ๋์ด์๋๋ฐ์,
์ฑ์ด ๋ ์ด์ด์ ๊ด๋ จ๋ ์ด๋ฒคํธ๋ฅผ ์ฒ๋ฆฌํ ์ ์๊ฒํ๋ ๋ฉ์๋๋ค์ ๋ด๊ณ ์๋ค๊ณ ์ค๋ช ํ๊ณ ์๊ณ ,
์ฌ๊ธฐ์๋ ๋๊ฐ์ด ๋ ์ด์ด์ ์ปจํ ์ธ ๋ฅผ ์ ๊ณตํ๊ธฐ ์ํด์, ํ์ ๋ ์ด์ด๋ฅผ ๊ด๋ฆฌํ๊ธฐ ์ํด์, ๊ทธ๋ฆฌ๊ณ ์ ๋๋ฉ์ด์ ์ ์ ๊ณตํ๊ธฐ ์ํด์๋ผ๊ณ ์ค๋ช ํ๊ณ ์์ต๋๋ค. ์ด ํ๋กํ ์ฝ์ ์ฑํํ๊ณ ๊ตฌํํ๋ฉด ๋ฐ๋์ ๋ ์ด์ด ๊ฐ์ฒด์ delegate์ ํ ๋น์ด ๋์ด์ผํ๋ค๊ณ ํ๋, UIView๊ฐ ์ด ํ๋กํ ์ฝ์ ์ฑํํ๊ณ ์๋ค๊ณ ์ถ์ธกํด๋ณผ ์ ์๊ฒ ๋ค์.
์ญ์๋! ์ฑํํ๊ณ ์์์ต๋๋ค. ๊ตฌํ์ ์์ฝ๊ฒ๋ ํ์ธํ ์๊ฐ ์๋ค์ใ
์๋ ๊ทธ๋์ ํ๋ฉด์ ๋๊ฐ ๊ทธ๋ฆฌ๋๊ณ ..
์ ๊ทธ๋ผ ์ด์ฏค์์ ๋๋ ์๋ฌธ.. ์ ๋๋ฉ์ด์ ์ Core Animation์ด ๋นํธ๋งต์ผ๋ก ํ๋๊ฑฐ ์๊ฒ ๋๋ฐ ๊ทธ๋ฅ ํ๋ฉด์ ๋๊ฐ ๊ทธ๋ฆฌ๋๊ฑด๋ฐ??
์ด๋ฒ์ View Programming Guide๋ฅผ ์ด์ด๋ดค์ด์. ์์ ์ด๋ฐ ๋ด์ฉ์ด ์๋๋ผ๊ตฌ์. ์ผ๋จ ๊ฐ ๋ทฐ๋ค์ ์์ ๊ณผ ๋์๋๋ ๋ ์ด์ด๋ค์ ํ๋์ฉ ๊ฐ์ง๊ณ ์์ด์. ๊ทธ๋ฆฌ๊ณ ์ด ๋ ์ด์ด๋ค์ layer ํ๋กํผํฐ๋ก ์ ๊ทผํ ์ ์์ฃ . ๊ทธ๋ฆฌ๊ณ ์ด ๋ ์ด์ด์์ ํ๋ฉด์ ๋ณด์ฌ์ง๋ ๋นํธ๋ค์ด ์ค์ ๋ก ๋ ๋๋ง๋ฉ๋๋ค.
๊ทธ๋์ view์์ ํ๋ฉด์ ๊ทธ๋ฆฌ๋ ์ฝ๋๋ ์ต๋ํ ์ ๊ฒ ํธ์ถ๋์ด์. ์๋ํ๋ฉด Core Animation์์ ์บ์ฑํด๋ ๋นํธ๋งต์ ๊ทธ๋๋ก ๋ณด์ฌ์ฃผ๋ฉด ๋๋๊น์.
์ด์ ํผ์ฆ์ด ๋ง์ถฐ์ง๋ค์!
์๊น delegate์์ ๊ตฌํํด์ผํ ๋ฉ์๋์ ์ญํ ์ด ๋ ์ด์ด์ ์ปจํ ์ธ ๋ฅผ ์ ๊ณตํ๋ ๊ฒ์ด์๋๋ฐ์, ํ๋ฉด์ ๋ณ๊ฒฝ์ด ์๊ฑฐ๋ ์ฒ์ ๊ทธ๋ ค์ง ๋ view์์ ํ๋ฉด์ ๊ทธ๋ฆฌ๊ณ , delegate ๋ฉ์๋๋ฅผ ํธ์ถํด์ CALayer์ ์ปจํ ์ธ ๋ฅผ ์ ๋ฌํฉ๋๋ค. ๊ทธ๋ผ CALayer๋ ์ด ์ปจํ ์ธ ๋ฅผ ์บ์ฑํด๋๊ณ ์๋ค๊ฐ ํ์ํ ๋ ๊ทธ๋๋ก ์ฌ์ฉํ๋ ๊ฒ์ด์ฃ . ๊ทธ๋์ ๋งค๋ฒ ๋ทฐ์ ์ปจํ ์ธ ๋ค์ ์๋ก ๊ทธ๋ ค์ค ํ์๊ฐ ์๊ฒ ๋ฉ๋๋ค.
์ด ์ ๋ฆฌ
1) UIView๋ layer ํ๋กํผํฐ๋ฅผ ๊ฐ์ง๊ณ ์๋ค.
2) layer ํ๋กํผํฐ๋ layerClass ํ์ ํ๋กํผํฐ์ ์ํด ์ด๋ค ๋ ์ด์ด๊ฐ ๋ง๋ค์ด์ง์ง ๊ฒฐ์ ๋๋ค.
3) UIView๋ CALayerDelegate๋ฅผ ์ฑํํ๊ณ ์๋ค.
4) ์ฑํํ Delegate์ display๋ draw ๋ฉ์๋๊ฐ ํ๋ฉด์ ๋ณด์ฌ์ฃผ๋ ์์ ์ ํธ์ถ๋๋ค.
5) ์ด ๋ฉ์๋๊ฐ ํธ์ถ๋๋ฉด ํ๋ฉด์ ๋ณด์ฌ์ค ์ปจํ ์ธ ๋ฅผ layer์ ์ ๊ณตํ๋ค.
6) ๋ ์ด์ด๋ ์ด ์ปจํ ์ธ ๋ฅผ ๋นํธ๋งต์ผ๋ก ์บ์ฑํด์ ๊ฐ์ง๊ณ ์๋๋ค.
7) ๋ทฐ๊ฐ ๋ค์ ๊ทธ๋ ค์ง๊ฑฐ๋, ์ ๋๋ฉ์ด์ ์ ์์ํ๋ฉด GPU๋ฅผ ํตํด ์บ์ฑ๋ ๋นํธ๋งต์ ์ฌ์ฉํด ์๋ก์ด ๋นํธ๋งต์๋ง๋ ๋ค.
๋ง๋ฌด๋ฆฌ
์ฌ์ค ์๋ฒฝํ ์ ๋ณด์ธ์ง ํ์ ์ด ์๊ธดํด์..! ๋ช ํํ์ง ์์ ์ ๋ณด๋ก ํฌ์คํ ์ ํ ๊ฒ ๊ฐ์์ ์กฐ๊ธ ๊ฑฑ์ ์ ๋ฉ๋๋คใ . ๋ง์ ๋ธ๋ก๊ทธ์์ ์ค์ ๋ก UIView์์๋ ํ๋ฉด์ ๊ทธ๋ฆฌ์ง ์๊ณ CALayer์์ ๋ชจ๋ ๊ฑธ ํ๋ค๊ณ ์ค๋ช ํ๊ณค ํ๋๋ฐ, ๊ทธ๋ผ "CPU๋ฅผ ์ฌ์ฉํด์ ํ๋ฉด์ ๊ทธ๋ฆฐ๋ค"๋ผ๋ ๋ง์ด ์ฑ๋ฆฝํ์ง ์์์์.. ๊ทธ๋ฆฌ๊ณ ์บ์ฑ๋ ๋นํธ๋งต์ ์ด๋ป๊ฒ ์ด์ฉํ๋์ง์ ๋ํ ๋ถ๋ถ..! CALayer์ ๋ํด์ ์ ์ ๋ฆฌ๋ ์๋ฃ๊ฐ ์๊ฑฐ๋ ์ดํดํ๊ณ ๊ณ์๋ค๋ฉด ๋์์ฃผ์ธ์!
๊ณต์ ๋ฌธ์๋ฅผ ํ๊ณ ํ๋ฉด์ ์ ๋ฆฌํ ๋ด์ฉ์ด๋ผ์ ๋๋ฝ๋ ์ ๋ณด๋ค์ด ์์ ์๋ ์๊ณ ํ๋ฆฐ ๋ด์ฉ์ด ์์ ์๋ ์์ด์. ๋ง์ฝ ๊ทธ๋ ๋ค๋ฉด ์๋ ค์ฃผ์๋ฉด ์ ๋ ๋ค์ ๊ณต๋ถํด์ ๋ด์ฉ์ ์์ ํด๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค!
์ฝ์ด์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค~!
๋ํผ๋ฐ์ค
https://developer.apple.com/documentation/uikit/uiview/1622436-layer
https://developer.apple.com/documentation/uikit/uiview/1622626-layerclass
https://developer.apple.com/documentation/uikit/uiview
https://developer.apple.com/documentation/quartzcore/calayer
https://developer.apple.com/documentation/quartzcore/calayerdelegate
'๐ ์์ด-์ค-์์ค > ๐ฑ iOS ๊ฐ๋ฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[iOS] ์ฑ ์๋๋ฐ์ค์ iOS์ ํ์ผ ์์คํ (2) | 2022.01.21 |
---|---|
[iOS] ๋ฉ์ดํธ๋ฌ๋: ๋ฐ์ชฝ์ง๋ฆฌ ์ด๋ฏธ์ง ์บ์ ๊ฐ์ ํ๊ธฐ (0) | 2022.01.18 |
[iOS] required init?(coder: NSCoder)์ ์ ์ฒด๋ฅผ ์ฐพ์์ (1) | 2022.01.11 |
[iOS] ๊ณต์๋ฌธ์๋ก ๊ณต๋ถํ๋ URLSession (2) | 2022.01.11 |
[iOS] iOS๋ ํ๋ฉด์ ์ด๋ป๊ฒ ๊ทธ๋ฆด๊น? RunLoop ๋ถํฐ Constraint, Layout, Display ๊น์ง (2) | 2021.12.23 |
๋๊ธ
์ด ๊ธ ๊ณต์ ํ๊ธฐ
-
๊ตฌ๋
ํ๊ธฐ
๊ตฌ๋ ํ๊ธฐ
-
์นด์นด์คํก
์นด์นด์คํก
-
๋ผ์ธ
๋ผ์ธ
-
ํธ์ํฐ
ํธ์ํฐ
-
Facebook
Facebook
-
์นด์นด์ค์คํ ๋ฆฌ
์นด์นด์ค์คํ ๋ฆฌ
-
๋ฐด๋
๋ฐด๋
-
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
-
Pocket
Pocket
-
Evernote
Evernote