-
[iOS] Core Animation μ΄λ? (2)iOS/π€ App 2021. 7. 5. 12:12
μλ νμΈμπΆ
μ΄μ κΈμ μ΄μ΄μ Core Animation Basic λ¬Έμλ₯Ό μ λ¦¬ν΄ λ³΄μμ΅λλ€!
λ°λ‘ μμν΄λ³Όκ²μ!!
Core Animation μ λ·°μ λ€λ₯Έ μκ°μ μμλ€μ μμ§μ΄λλ° νμν λ²μ© λͺ©μ μ μμ€ν μ μ 곡ν©λλ€.
Core Animation μ λ·°λ₯Ό λ체νλ €λ λͺ©μ μΌλ‘ μ¬μ©νλ κ²μ΄ μλλλ€.
μ€νλ € λ·°λ€κ³Ό κ²°ν©λμ΄μλ κΈ°μ μ λλ€.
κ·Έλ¦¬κ³ μ΄ κΈ°μ μ λͺ©μ μ μ½ν μΈ λ₯Ό μμ§μ΄λλ° μμ΄μ λ λμ μ±λ₯κ³Ό μ§μμ μ 곡νλ κ²μ λλ€.
Core Animation μ ν΅ν΄ λ·°μ μ½ν μΈ λ₯Ό λΉνΈλ§΅ ννλ‘ μΊμ±ν¨μΌλ‘μ, κ·Έλν½ μ₯μΉμ μν΄ λ°λ‘ μμ λ μ μλλ‘ νμ¬ μμ κ°μ λͺ©μ μ λ¬μ±ν©λλ€.( λΉνΈλ§΅ ννλ‘ μΊμ±νλ€λ ννμ΄ μμ£Ό λ±μ₯ν¨... κ·Έ 주체λ λ μ΄μ΄μ)
λͺκ°μ§ κ²½μ°μμ, Core Animation μ μΊμ± λμ λλ¬Έμ μ½ν μΈ λ₯Ό μ΄λ»κ² νννκ³ κ΄λ¦¬ν΄μΌν μ§ κ³ λ €ν΄μΌνλ μν©μ΄ μκΉλλ€.
κ·Έλ¬λ λλΆλΆμ κ²½μ°μλ μ΄ νλ μμν¬κ° μ‘΄μ¬νλμ§μ‘°μ°¨λ λͺ¨λ₯΄κ³ μ¬μ©νκ² λ κ²μ λλ€.
μ΄λ° μΊμ±λμ μ΄μΈμλ, Core Animation μ ν΅ν΄ μ§μ μ½ν μΈ λ₯Ό μμ±ν μ μμΌλ©°, μμ±ν μ½ν μΈ λ₯Ό λ·°μ ν΅ν©νμ¬ κ°μ΄ μμ§μ΄κ² λ§λ€μλ μμ΅λλ€
λ μ΄μ΄κ° 그리기μ μ λλ©μ΄μ μ κΈ°λ³Έμμλ₯Ό μ 곡νλ€
λ μ΄μ΄ μ€λΈμ νΈλ 3μ°¨μ 곡κ°μμ λ€λ£¨μ΄μ§λ 2μ°¨μ νλ©΄μ λλ€.
κ·Έλ¦¬κ³ Core Animation μΌλ‘ λ€λ£¨λ μμ λ€μ ν΅μ¬ κ°μ²΄μ λλ€.
λ·°μ λΉμ·νκ² λ μ΄μ΄λ νλ©΄μ μ’ν, μ½ν μΈ , μκ°μ μμλ€μ λν μ 보λ₯Ό κ΄λ¦¬ν©λλ€.
λ·°μ λ€λ₯Έ μ μ, λ μ΄μ΄λ κ·Έλ€μ μΈνμ μ μνμ§ μμ΅λλ€.
λ μ΄μ΄λ λΉνΈλ§΅μ λν μν μ 보λ₯Ό κ΄λ¦¬νλ€κ³ 보λνΈμ΄ λ§μ΅λλ€.
λΉνΈλ§΅ μ€μ€λ‘λ λ·°κ° κ·Έλ €λΈ κ²°κ³Όλ¬Όμ΄κ±°λ, μ§μ μ μν κ³ μ λ μ΄λ―Έμ§κ° λ μ μμ΅λλ€.
μ΄λ¬ν μ΄μ λλ¬Έμ μ±μμ μ¬μ©νλ λ©μΈ λ μ΄μ΄λ λͺ¨λΈ μ€λΈμ νΈλ‘ κ°μ£Όλ©λλ€.
μλλ©΄ λ μ΄μ΄μ μ£Όμ μ± μμ΄ λ°μ΄ν°λ₯Ό κ΄λ¦¬νλ κ²μ΄κΈ° λλ¬Έμ λλ€.
λ μ΄μ΄ κΈ°λ° λλ‘μ λͺ¨λΈ
λλΆλΆμ λ μ΄μ΄λ μ€μ λ‘ κ·Έλ¦¬κΈ° λμμ μννμ§ μμ΅λλ€.
λμ μ, λ μ΄μ΄λ μ±μ΄ μ 곡ν? μ°μΆν΄λΈ? μ½ν μΈ λ₯Ό μΊ‘μ²νμ¬ λΉνΈλ§΅ ννλ‘ μΊμ±ν©λλ€.
μ΄ μΊμ±λ κ²°κ³Όλ¬Όμ 'backing store' λΌκ³ λΆλ₯΄κΈ°λ ν©λλ€.
λ μ΄μ΄μ μμ±μ λ³κ²½νλ€λ μλ―Έλ λ μ΄μ΄ μ€λΈμ νΈμ μ°κ΄λ μν μ 보λ₯Ό λ³κ²½νλ€λ κ²μ λλ€.
μ΄ λ³κ²½μ΄ μ λλ©μ΄μ μ μΌμΌν€λ©΄, Core Animation μ λ μ΄μ΄κ° μ μ₯ν΄ λμ λΉνΈλ§΅κ³Ό μν μ 보λ₯Ό κ·Έλν½ μ₯μΉμ μ λ¬ν©λλ€.
κ·Έλν½ μ₯μΉλ λ³κ²½λ μλ‘μ΄ μ 보λ₯Ό κ°μ§κ³ λΉνΈλ§΅μ μλ‘κ² κ·Έλ¦¬λ μμ μ ν©λλ€.
μ΄ μμ μ΄ μ μ μΈ λΉνΈλ§΅μ μ‘°μνλ€λ μ μ΄, λ μ΄μ΄ κΈ°λ° κ·Έλ¦¬κΈ°κ° κΈ°μ‘΄μ λ·° κΈ°λ° κ·Έλ¦¬κΈ° μμ κ³Ό λΆλͺ νκ² κ΅¬λ³λλ μ μ λλ€.
λ·°κΈ°λ° κ·Έλ¦¬κΈ°μμλ, λ·° λ³κ²½μ μλν λ λλΆλΆ drawRect: λ©μλλ₯Ό νΈμΆν©λλ€.
μ΄ λ©μλλ μλ‘μ΄ νλΌλ―Έν°λ₯Ό κ°μ§κ³ μ½ν μΈ λ₯Ό λ€μ κ·Έλ €λ λλ€.
κ·Έλ°λ° μ΄λ° λ°©λ²μ λΉμ©μ΄ λ§μ΄ λλλ€. λ©μΈμ°λ λμμ CPUλ₯Ό μ¬μ©νκΈ° λλ¬Έμ λλ€.
Core Animation λ₯Ό μ¬μ©νλ©΄ μ΄λ° λΆλ΄μ νΌν μ μμ΅λλ€.
Core Animation μ λ·°κΈ°λ° κ·Έλ¦¬κΈ°μ μ μ¬νκ±°λ λμΌν ν¨κ³Όλ₯Ό λ΄κΈ° μν΄μ μΊμ±λ λΉνΈλ§΅μ νλμ¨μ΄μ μ λ¬ν΄μ μμ νκΈ° λλ¬Έμ λλ€.
Core Animation μ΄ μΊμ±λ μ½ν μΈ λ₯Ό μμ£Ό μ¬μ©νκΈ°λ νμ§λ§, μ±μ λ°λμ μ΄κΈ° μ½ν μΈ λ₯Ό μ 곡νκ³ κ·Έκ²μ μ£ΌκΈ°μ μΌλ‘ μ λ°μ΄νΈ ν΄μ£Όμ΄μΌ ν©λλ€.
λ μ΄μ΄ μ€λΈμ νΈμκ² μ½ν μΈ λ₯Ό μ 곡νλ λ€μν λ°©λ²μ΄ μμ΅λλ€. μ΄ λ¬Έμλ₯Ό μ°Έκ³ νμλ©΄ λ©λλ€.
νλμ¨μ΄λ₯Ό ν΅ν΄ λΉνΈλ§΅μ μ‘°μνλ κ²μ μννΈμ¨μ΄λ₯Ό ν΅ν΄ μ‘°μνλ κ²λ³΄λ€ ν¨μ¬ λ λΉ λ₯΄κ² μ λλ©μ΄μ μ μμ±ν΄λΌμ μμ΅λλ€.
λ μ΄μ΄ κΈ°λ° μ λλ©μ΄μ
λ μ΄μ΄ μ€λΈμ νΈκ° κ°μ§κ³ μλ λ°μ΄ν°μ μν μ 보λ
νλ©΄μ νμλλ λ μ΄μ΄μ μ½ν μΈ μ μκ°μ μΈ ννκ³Όλ λΆλ¦¬λμ΄ μμ΅λλ€.
μ΄ λΆλ¦¬λ₯Ό ν΅ν΄ Core Animationκ° μ€λλ μν κ°μμ μλ‘μ΄ μνκ°μΌλ‘μ λ³κ²½μ μ λλ©μ΄μ ν ν μ μκ² λλ κ²μ λλ€.
μλ₯Ό λ€μ΄, λ μ΄μ΄μ μμΉ μμ±μ λ³κ²½νλ©΄ Core Animationμ΄ λ μ΄μ΄λ₯Ό κΈ°μ‘΄ μμΉμμ μλ‘ μ μλ μμΉ κ°μΌλ‘ μ΄λμν΅λλ€.
μ΄μ κ°μ΄ λ€λ₯Έ μμ±λ€μ λ³κ²½νλ©΄ μ μ ν μ λλ©μ΄μ μ μΌμΌν¬ μ μμ΅λλ€.
μλ κ·Έλ¦Όμ λ μ΄μ΄μμ μμ ν μ μλ λͺκ°μ§ νμ μ μ λλ©μ΄μ μ 보μ¬μ£Όκ³ μμ΅λλ€.
μ΄μΈμλ μ¬λ¬ μμ±λ€μ΄ κ°λ₯νλ°μ, μ΄ λ¬Έμ λ₯Ό νμΈνλ©΄ Animatable ν μμ± λ¦¬μ€νΈλ₯Ό νμΈν μ μμ΅λλ€.
μ λλ©μ΄μ κ³Όμ μ€μ, Core Animation μ νλ μκ³Ό νλ μκ°μ 그리기λ₯Ό νλμ¨μ΄μμ μμ ν©λλ€.
μ°λ¦¬κ° ν κ²μ μ λλ©μ΄μ μ μμμ κ³Ό μ’ λ£μ§μ μ μ νλ κ² λΏμ΄κ³ , λλ¨Έμ§λ Core Animation μ΄ μμμ ν΄μ€λλ€.
νμμ μν΄ μκ° μ 보μ λ€μν νλΌλ―Έν°λ₯Ό ν΅ν΄ 컀μ€ν λ κ°λ₯ν©λλ€. μ΄ λ¬Έμλ₯Ό μ°Έκ³ ν΄μ£ΌμΈμ!
Layer Objects Define Their Own Geometry
λ μ΄μ΄λ λ·°μ²λΌ frame κ³Ό bounds λ‘ μμΉμ ν¬κΈ°κ° ννλ©λλ€
κ·Έλ¦¬κ³ anchorPoint μ λ°λΌ Rotation μ κ²°κ³Όκ°μ΄ λ¬λΌμ§λλ€.
λ μ΄μ΄ νΈλ¦¬
Core Animation μμλ μΈ μ’ λ₯μ λ μ΄μ΄ μ€λΈμ νΈ μ§ν©μ΄ μμμ μΈμ§νκ³ κ°μλ€~~~~~~~~~
κ·Έλ¦¬κ³ μ΄ μ§ν©μ νΈλ¦¬ννλ‘ κ΅¬μ±λμ΄ μμ΅λλ€.
κ°κ°μ μ§ν©μ νλ©΄μ μ½ν μΈ λ₯Ό λμ°λλ° μμ΄μ μλ‘ λ€λ₯Έ μν μ μνν©λλ€.
1. Model Layer Tree (νΉμ Layer Tree) : μ°λ¦¬κ° κ°μ₯ λ§μ΄ μνΈμμ©νλ μ§ν©μ λλ€. μ λλ©μ΄μ μ μν μμ± κ°λ€μ μ μ₯νλ λͺ¨λΈ μ€λΈμ νΈμ λλ€. μ°λ¦¬κ° λ μ΄μ΄μ μμ±μ μμ νλ©΄, μ΄ μ§ν©μ μ€λΈμ νΈλ₯Ό μ¬μ©νλ κ²μ λλ€.
2. Presentation Tree: μ΄ νΈλ¦¬λ νμ¬ μ§νμ€μΈ μ λλ©μ΄μ μ κ°λ€μ κ°μ§κ³ μμ΅λλ€. Model Layer Tree λ μ΅μ’ κ°μ κ°μ§κ³ μλ€λ©΄, Presentation Tree λ νμ¬ νλ©΄μ λνλκ³ μλ νμ¬ κ°μ λ°μνκ³ μμ΅λλ€. μ£Όμν μ μ, μ΄ νΈλ¦¬μ μ€λΈμ νΈμ μμ±κ°λ€μ μ λ λ³κ²½νλ©΄ μλλ€λ κ²μ λλ€. νμν κ²½μ° μ½κΈ°λ§ κ°λ₯ν©λλ€.
βοΈβοΈ Presentaion Tree λ μ λλ©μ΄μ μ΄ λμμ€μΌ λλ§ μ κ·Όν΄μΌνλ μ€λΈμ νΈλ€μ λλ€.3. Render Tree: μ΄ νΈλ¦¬λ μ€μ μ λλ©μ΄μ λμμ μννλ νΈλ¦¬μ΄κ³ , Framework λ¨μμ λμνμ¬ private μΌλ‘ μ κ·Όν μ μμ΅λλ€!
λ·°μ λ μ΄μ΄μ μκ΄κ΄κ³
λ μ΄μ΄λ λ·°μ λ체μ¬κ° μλλλ€.
μ¦,λ μ΄μ΄ λ¨λ μΌλ‘ μκ°μ μΈν°νμ΄μ€λ₯Ό μμ±ν μ λ μμ΅λλ€.
λ μ΄μ΄λ λ·°μ κΈ°λ°μ μ 곡ν©λλ€.
ꡬ체μ μΌλ‘ λ§νμλ©΄, λ μ΄μ΄λ λ·°μ μ½ν μΈ κ·Έλ¦¬κΈ°μ μ λλ©μ΄μ μ λμ νλ μμΌλ‘ μ μ§νλ©΄μ μ½κ³ ν¨μ¨μ μΌλ‘ κ°λ₯νκ² ν΄μ€λλ€.
κ·Έλ¬λ, λ μ΄μ΄κ° νμ§ μλ μμ λ€λ μμ΅λλ€.
λ μ΄μ΄λ μ΄λ° κ²λ€μ νμ§ μμ΅λλ€.
- μ΄λ²€νΈλ₯Ό νΈλ€λ§νμ§ μμ΅λλ€.
- μ½ν μΈ λ₯Ό κ·Έλ¦¬μ§ μμ΅λλ€.
- Responder chain μ ν¬ν¨λμ΄ μμ§ μμ΅λλ€.
- κ·Έ μΈ νμ§ μλ μμ λ€μ΄ μ‘΄μ¬ν©λλ€.
μ΄λ° μ΄μ λλ¬Έμ, λͺ¨λ μ±μ μμ κ°μ μμ λ€μ μν΄μ μ¬μ ν λ·°κ° μ¬μ ν ν κ° μ΄μ νμν©λλ€.
iOS μμλ λͺ¨λ λ·°κ° κ°κ°μ λ μ΄μ΄ μ€λΈμ νΈμκ² μ§μμ λ°μ΅λλ€. (layer-backed)
CALayer λ¬Έμμμ μΈκΈλλλ°, λ·°λ₯Ό μμ±νλ©΄ ν κ°μ root layer κ° μμ±λμ΄ λ·°μ μ°κ²°λ©λλ€.
βοΈβοΈ layer-backed λ·°μμ, (iOS λ λͺ¨λ λ·°κ° layer-backed λ·°) κ°λ₯νλ€λ©΄ κ·Έκ²μ λ μ΄μ΄ λμ λ·°λ₯Ό μμ νλ κ²μ μΆμ²ν©λλ€.
iOS μμ λ·°λ λ μ΄μ΄ μ€λΈμ νΈλ₯Ό κ°μΈκ³ μλ κ°λ²Όμ΄ λνΌμ λλ€.
κ·Έλμ λ·° λμ λ μ΄μ΄λ₯Ό μμ ν΄λ λμ²΄λ‘ μ λμν©λλ€.
νμ§λ§ μ΄λ€ κ²½μ°μλ λ°λμ§ νλ κ²°κ³Όκ° λμ¬ μ λ μμ΅λλ€.
μ΄λ° ν¨μ μ ν΄λΉνλ μ΄λ€ κ²½μ°κ° 무μμΈμ§λ λ¬Έμ μ 체μ κ±Έμ³ μ€λͺ νκ² λ€κ³ λμμμΌλ, μ§κΈμΌλ‘μ λ€ μ½μ΄λ³΄μ§λ μμ κ²μ΄κΈ° λλ¬Έμ μ΄λ€ κ²½μ°κ° μλ€!! μ λλ‘λ§ μκ³ λμ΄κ°κ³μ΅λλ€.
λ¬Όλ‘ λ·°μ μ§μ μ°κ²°λ λ μ΄μ΄λ§κ³ λ, λ·°μ μ°κ΄λμ΄μμ§ μμ λ μ΄μ΄ μ€λΈμ νΈλ₯Ό μ§μ μμ±ν μλ μμ΅λλ€.
μ΄ μ λμμ λ¬Έμλ λ§λ¬΄λ¦¬ λ©λλ€. μμ§ Layer λ₯Ό μ§μ 건λλ €λ³Έμ μ΄ μκΈ° λλ¬Έμ, ν΅μ¬ κ°λ μ λλ§ μκ³ κ°μ μλ μ λλ‘ μ 리ν΄λ³΄μμ΅λλ€.
λ!
π€π’[μ°μ§±μ iOS λΈλ‘κ·Έ]π΅π»
iOSλ₯Ό 곡λΆνλ©΄μ λ°°μ΄ λ΄μ©μ κΈ°λ‘νκ³ μμ΅λλ€.'iOS > π€ App' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[iOS] 리μ€ν°λ μ²΄μΈ (Responder Chain) μ΄λ? (feat. UIResponder, First Responder, UIEvent) (2) 2021.07.12 [iOS] μλμ°λ? (feat. UIWindow) (0) 2021.07.05 [iOS] Core Animation μ΄λ? (1) (0) 2021.07.05 [iOS] CALayer λ? (0) 2021.07.05 [iOS] Dependency Injection (μμ‘΄μ± μ£Όμ ) μ΄λ? (0) 2021.06.20