๐ŸŽ iOS/UI

[iOS/UI] CALayer๋ž€? (feat. ์• ๋‹ˆ๋ฉ”์ด์…˜ ์›๋ฆฌ)

Fomagran ๐Ÿ’ป 2022. 3. 17. 12:34
728x90
๋ฐ˜์‘ํ˜•

 

์•ˆ๋…•ํ•˜์„ธ์š” Foma ๐Ÿ’ป ์ž…๋‹ˆ๋‹ค!

 

์ €๋ฒˆ ์‹œ๊ฐ„์— Core Animation์— ๋Œ€ํ•œ ๊ธ€์„ ์ž‘์„ฑํ–ˆ๋Š”๋ฐ์š”.

 

Core Animation์„ ๊ณต๋ถ€ํ•˜๋‹ค ๋ณด๋‹ˆ Layer๊ฐ€ ๊ฑฐ์˜ ์ „๋ถ€๋ผ๊ณ  ํ•ด๋„ ๋˜๊ฒ ๋”๋ผ๊ตฌ์š”..

 

๊ทธ๋ž˜์„œ ๋”ฐ๋กœ Layer์— ๋Œ€ํ•ด ์ •๋ฆฌํ•˜๋Š” ๊ธ€์„ ์ž‘์„ฑํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

 

(ํ˜น์‹œ Core Animation์— ๋Œ€ํ•ด ์ž˜ ๋ชจ๋ฅด์‹œ๋Š” ๋ถ„๋“ค์œผ ์—ฌ๊ธฐ ์—์„œ ํ™•์ธํ•ด์ฃผ์„ธ์š”!)

 

๋ฐ”๋กœ ์‹œ์ž‘ํ• ๊ฒŒ์š”~


CALayer๋ž€?

 

Layer์˜ ์‚ฌ์ „์  ์˜๋ฏธ๋Š” ๊ฒน,๋ง‰,์ธต,๋‹จ๊ณ„๋ฅผ ๋œปํ•ฉ๋‹ˆ๋‹ค.

 

์‚ฌ์ „์  ์˜๋ฏธ์™€ ๊ฐ™์ด iOS์—์„œ๋„ ์•„๋ž˜์™€ ๊ฐ™์ด ๊ณ„์ธต์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ๋˜๋Š”๋ฐ์š”.

 

 

 

์ •ํ™•ํ•˜๊ฒŒ๋Š” ์ด๋ฏธ์ง€ ๊ธฐ๋ฐ˜ ์ปจํ…์ธ ๋ฅผ ๊ด€๋ฆฌํ•˜๊ณ  ํ•ด๋‹น ์ปจํ…์ธ ์—์„œ ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๊ฐœ์ฒด์ž…๋‹ˆ๋‹ค.

 

์ฆ‰, ๋ฐฐ๊ฒฝ์ƒ‰,ํ…Œ๋‘๋ฆฌ ๋ฐ ๊ทธ๋ฆผ์ž์™€ ๊ฐ™์ด ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋Š” ํ™”๋ฉด์— ํ‘œ์‹œํ•  ์ˆ˜ ์žˆ๋Š” ์‹œ๊ฐ์  ์†์„ฑ์„ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ์ด์ฃ .

 

๊ณ ๋กœ ์šฐ๋ฆฌ๊ฐ€ ์‰ฝ๊ฒŒ ์‹œ๊ฐ์  ์š”์†Œ๋ฅผ ๋งŒ๋“ค์–ด ์‚ฌ์šฉํ•˜๋Š” UIView๋Š” Layer๋ฅผ ๋ฐ˜๋“œ์‹œ ๊ฐ€์ง€๊ณ  ์žˆ์ฃ .


Layer์˜ ์›๋ฆฌ

 

์œ„์—์„œ Layer๋Š” ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค๊ณ  ์–ธ๊ธ‰ํ–ˆ์Šต๋‹ˆ๋‹ค.

 

๊ทธ๋ ‡๋‹ค๋ฉด Layer๋Š” ์–ด๋–ค ์‹์œผ๋กœ ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์ผ๊นŒ์š”?

 


Geometry

 

๋จผ์ € ์œ„์น˜๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” Layer์˜ Geometry์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

 

(Geometry๋Š” ๊ณต๊ฐ„์— ์žˆ๋Š” ๋„ํ˜•์˜ ๋ชจ์–‘,์ƒ๋Œ€์  ์œ„์น˜ ๋“ฑ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.)

 

Layer๋Š” ๋‘ ๊ฐ€์ง€์˜ ์ขŒํ‘œ๊ณ„๋ฅผ ์‚ฌ์šฉํ•˜๋Š”๋ฐ์š”.

 

1. Bounds์™€ Position

 

๋จผ์ € ํฌ์ธํŠธ ๊ธฐ๋ฐ˜์œผ๋กœ ๋‹ค๋ฅธ Layer์— ์ƒ๋Œ€์ ์œผ๋กœ ์ง€์ •๋˜์–ด์•ผ ํ•  ๋•Œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

 

bounds๋Š” Layer ์ž์ฒด๊ฐ€ ์–ด๋Š ์ขŒํ‘œ์— ์–ด๋Š ํฌ๊ธฐ๋กœ ์žˆ๋Š”์ง€ ์ •์˜ํ•˜๊ณ , position์€ ์ „์ฒด ํ™”๋ฉด์„ ๊ธฐ์ค€์œผ๋กœ ๋ ˆ์ด์–ด์˜ ์œ„์น˜๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.

 

 

์œ„์—์„œ์™€ ๊ฐ™์ด position์€ Layer์˜ ์ค‘์•™์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

 

๊ณ ๋กœ bounds์™€ position์„ ์‚ฌ์šฉํ•˜์—ฌ ์›€์ง์ž„์ด ์žˆ๋Š” ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ๋™์ž‘ํ•˜๋Š” ๊ฒƒ์ด์ฃ .

 

2. Anchorpoint

 

Anchorpoint๋Š” ์–ด๋– ํ•œ ๋ณ€ํ˜•์ด ์ผ์–ด๋‚˜๋Š” ๊ธฐ์ค€์ ์„ ๋งํ•ฉ๋‹ˆ๋‹ค.

 

iOS๋Š” ์™ผ์ชฝ ์ƒ๋‹จ์ด (0,0) ์˜ค๋ฅธ์ชฝ ํ•˜๋‹จ์ด(1,1)์ธ๋ฐ ์ด ๋ฒ”์œ„์—์„œ Anchorpoint๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

์•„๋ž˜์™€ ๊ฐ™์ด ๊ฐ€์šด๋ฐ์— ์„ค์ •(0.5,0.5)ํ•  ์ˆ˜๋„ ์žˆ๊ณ , ์™ผ์ชฝ ์ƒ๋‹จ์ธ(0,0)์œผ๋กœ ์„ค์ •ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

 

Anchorpoint๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์–ด๋– ํ•œ ๋ณ€ํ˜•์ด ๋ฐœ์ƒํ•˜๊ฒŒ ๋˜๋Š”๋ฐ, ์ด๋Š” ํšŒ์ „์ด ์ ์šฉ๋  ๋•Œ ๊ฐ€์žฅ ๋‘๋“œ๋Ÿฌ์ง‘๋‹ˆ๋‹ค.

 

Anchorpoint๋ฅผ ๊ฐ€์šด๋ฐ(0.5,0.5)๋กœ ์ง€์ •ํ–ˆ์„ ๋• ๊ฐ€์šด๋ฐ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ํšŒ์ „๋˜๊ธฐ ๋•Œ๋ฌธ์— ์•„๋ž˜ ์‚ฌ์ง„๊ณผ ๊ฐ™์ด ํšŒ์ „๋ฉ๋‹ˆ๋‹ค.

 

 

ํ•˜์ง€๋งŒ ์™ผ์ชฝ ์ƒ๋‹จ(0,0)๋กœ ์ง€์ •ํ–ˆ์„ ๋• ์™ผ์ชฝ ์ƒ๋‹จ์„ ๊ธฐ์ค€์œผ๋กœ ํšŒ์ „๋˜๊ธฐ ๋•Œ๋ฌธ์— ์•„๋ž˜ ์‚ฌ์ง„๊ณผ ๊ฐ™์ด ํšŒ์ „๋ฉ๋‹ˆ๋‹ค.

 

 

๋ณดํ†ต์˜ ๊ฒฝ์šฐ Anchorpoint๋Š” ๊ฐ€์šด๋ฐ๋กœ ์„ค์ •๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

 


3D

 

Layer๋Š” ์œ„์—์„œ ๋‹ค๋ฃฌ 2์ฐจ์›(์œ„์น˜,์ขŒํ‘œ) ์ •๋ณด๋ฟ๋งŒ ์•„๋‹ˆ๋ผ 4x4 ํ–‰๋ ฌ์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๊ณ  ์žˆ๊ณ  ์ด๊ฒƒ์€ 3์ฐจ์›์œผ๋กœ Layer๋ฅผ ์กฐ์ž‘ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

 

 

ํ–‰๋ ฌ ์ˆ˜ํ•™์„ ์‚ฌ์šฉํ•˜์—ฌ x์ถ•,y์ถ•,z์ถ•์„ ๊ธฐ์ค€์œผ๋กœ ๋ณ€ํ™˜์„ ์กฐ์ž‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

3D ๋ณ€ํ˜•์— ๋Œ€ํ•ด ์ž˜ ๋‹ค๋ฃจ๊ณ  ์‹ถ๋‹ค๋ฉด CATransform3D๋ฅผ ๊ณต๋ถ€ํ•˜์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.


Layer Tree

 

๋งจ ์ฒ˜์Œ ์–ธ๊ธ‰ํ–ˆ๋‹ค์‹œํ”ผ Layer๋Š” SubLayer๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์–ด ์•„๋ž˜์™€ ๊ฐ™์ด ๊ณ„์ธต ๊ตฌ์กฐ๋กœ ํ˜•์„ฑ๋ฉ๋‹ˆ๋‹ค.

 

 

 

ํŠนํžˆ presentationLayer๋ฅผ ์ด์šฉํ•˜๋ฉด ์• ๋‹ˆ๋ฉ”์ด์…˜ ์ค‘๊ฐ„(ํ•ด๋‹น ์ˆœ๊ฐ„์— ๋‚˜ํƒ€๋‚˜๋Š” ํ™”๋ฉด)์— ์–ด๋– ํ•œ ์†์„ฑ์„ ๊ฐ’์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์• ๋‹ˆ๋ฉ”์ด์…˜ ์ง„ํ–‰ ์ค‘์— ์–ด๋– ํ•œ ์ž‘์—…์„ ํ•˜๊ธฐ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.


Layer์™€ View

 

Layer๋Š” View๋ฅผ ๋Œ€์ฒดํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— Layer ์ž์ฒด๋กœ๋งŒ ์‹œ๊ฐ์ ์ธ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋งŒ๋“ค ์ˆœ ์—†์Šต๋‹ˆ๋‹ค.

 

Layer๋Š” View์˜ ๋‚ด์šฉ์„ ๋” ์‰ฝ๊ณ  ํšจ์œจ์ ์œผ๋กœ ๊ทธ๋ฆฌ๊ฑฐ๋‚˜ ์• ๋‹ˆ๋ฉ”์ด์…˜ ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ์ด๋ฒคํŠธ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ฑฐ๋‚˜ ์ปจํ…์ธ ๋ฅผ ๊ทธ๋ฆฌ๊ฑฐ๋‚˜ ๋“ฑ์˜ ๋‹ค๋ฅธ ๋งŽ์€ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค.

 

๊ณ ๋กœ ์ƒํ˜ธ ์ž‘์šฉ์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์œ„ํ•ด์„  View๊ฐ€ ์กด์žฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

 

๋ชจ๋“  View์—๋Š” Layer๊ฐ€ ์กด์žฌํ•ด์•ผ ํ•˜์ง€๋งŒ, ๋ชจ๋“  Layer์— View ์กด์žฌํ•ด์•ผ ํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค.

 

์ฆ‰, Layer๋Š” ๋…๋ฆฝ์ ์œผ๋กœ ์กด์žฌํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ ์ด๊ฒƒ์„ ๋…๋ฆฝ ์‹คํ–‰ํ˜• ๋ ˆ์ด์–ด๋ผ๊ณ  ๋ถ€๋ฆ…๋‹ˆ๋‹ค.

 

์ด๊ฒƒ์€ ์—ฌ๋Ÿฌ ์œ„์น˜์—์„œ ๋™์ผํ•œ ์ด๋ฏธ์ง€๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋Š” ๊ฒฝ์šฐ ๋“ฑ์—์„œ ์—ฌ๋Ÿฌ View๋ฅผ ๋งŒ๋“œ๋Š” ๋Œ€์‹  ์—ฌ๋Ÿฌ ๋…๋ฆฝํ˜• ๋ ˆ์ด์–ด ๊ฐœ์ฒด๋ฅผ ๋งŒ๋“ค์–ด ์—ฐ๊ฒฐํ•  ์ˆ˜ ์ž‡์Šต๋‹ˆ๋‹ค.


Reference

 

 

 

Core Animation Basics

Core Animation Basics Core Animation provides a general purpose system for animating views and other visual elements of your app. Core Animation is not a replacement for your app’s views. Instead, it is a technology that integrates with views to provide

developer.apple.com

728x90
๋ฐ˜์‘ํ˜•