iOSμ View μ²΄κ³ - λ·° κ³μΈ΅, λ·°μ μ’ν, νλ μ vs λ°μ΄λ, λ·° κ³μΈ΅ λλ²κΉ ν΄
1μ₯μμ μμ μ¬μ μ±μ λ§λ€λ©΄μ μλμ λ΄μ©λ€μ νμ΅νμ΅λλ€.
- μμ (Asset) - μ± μμ΄μ½, μ΄λ―Έμ§ νμΌ, λ°μ΄ν° νμΌμ κ΄λ¦¬, μ± μ€νμ νμΌμ μ½κ² μ κ·Όν μ μλλ‘ λμμ€λ€.
- μ± μλ(App thinning)κ³Ό μ± μ¬λΌμ΄μ±(App slicing) - λ€μν λλ°μ΄μ€μμ λΉ λ₯΄κ² λ€μ΄λ‘λν μ μλλ‘ νλ μ΅μ ν κΈ°μ
- Cocoa Touch, UIKit, Foundation - iOS μ± κ°λ°μ νμν νλ μμν¬
- Autolayout μ μ μ©νλ©° UIλ₯Ό κ°λ°νλ λ² - μΈν°νμ΄μ€ λΉλ vs μ½λλ‘ μμ±
- iOSμ View μ²΄κ³ - λ·° κ³μΈ΅, λ·°μ μ’ν, νλ μ vs λ°μ΄λ, λ·° κ³μΈ΅ λλ²κΉ ν΄
- λμμΈ ν¨ν΄κ³Ό MVC ν¨ν΄ - μ±κΈν΄ ν¨ν΄κ³Ό μ±κ°λ°μμμ MVC ν¨ν΄μ μ€μ μ μΌλ‘
- AVAudioPlayer, Timer - μμ νμΌμ μ¬μνκΈ° μν AVAudioPlayer, μκ°μ΄λ₯Ό μ¬κΈ° μν Timer
π iOS μ±μμ 컨ν μΈ λ₯Ό 보μ¬μ£ΌκΈ° μν Window & View
- iOS μ± νλ©΄μμ 보λ μ½ν μΈ λ Window μ View λ₯Ό μ¬μ©ν΄ λνλΈλ€.
- Window λ κ·Έ μμ²΄λ‘ μ½ν μΈ λ₯Ό ννν μ μμ§λ§, View λ₯Ό μν 컨ν μ΄λ μν μ νλ€.
- View λ UIView ν΄λμ€ νΉμ νμν΄λμ€μ μΈμ€ν΄μ€λ‘ Window μ ν μμμμ μ½ν μΈ λ₯Ό 보μ¬μ€λ€.
- View λ μ΄λ―Έμ§, λ¬Έμ, λν, λ λ€λ₯Έ λ·° λ±μ μ½ν μΈ λ₯Ό λνλΌ μ μλ€.
- View λ gesture recognizer λ₯Ό μ¬μ©νκ±°λ ν°μΉ μ΄λ²€νΈλ₯Ό μ²λ¦¬ν μ μλ€.
- View λ λ·° κ³μΈ΅(View hierarchy) ꡬ쑰μμ λΆλͺ¨λ·°μ μμλ·°μ μμΉμ ν¬κΈ°λ₯Ό κ΄λ¦¬νλ€.
π‘ View λ iOS μ±μμ 컨ν μΈ λ₯Ό 보μ¬μ£ΌκΈ° μν νμ μμλ‘, μ΄λ―Έμ§, λ¬Έμ, λν, λ λ€λ₯Έ λ·° λ±μ μ½ν μΈ λ₯Ό 보μ¬μ€ μ μλ€. View κ³μΈ΅μ μ΅μλ¨μ UIWindow κ°μ²΄λ‘, μκ°μ μΌλ‘ ννλμ§ μμ§λ§ View λ₯Ό μν 컨ν μ΄λ μν μ νλ€.
βοΈ λ·° κ³μΈ΅ (View hierarchy) ?
View λ μμ μ μ½ν μΈ λ₯Ό 보μ¬μ£ΌκΈ°λ νμ§λ§, λ€λ₯Έ λ·°λ₯Ό μν 컨ν μ΄λλ‘μ¨μ μν λ νλ€. λ§μ½ νΉμ λ·°κ° μ»¨ν μ΄λ λ·°λ‘ λ€λ₯Έ λ·°λ₯Ό ν¬ν¨ν λ, λΆλͺ¨ - μμ κ΄κ³κ° μκΈ°λ©°, μ΄λ¬ν κ²μ λ·° κ³μΈ΅μ΄λΌκ³ νλ€.
- Sub View κ° λΆν¬λͺ ν κ²½μ° -> Super view κ° Sub view μ κ°λ €μ§λ€.
- Sub View κ° λ°ν¬λͺ ν κ²½μ° -> Super view μ Sub view κ° ν¨κ» 보μ¬μ§λ€.
π‘λΆλͺ¨ λ·° = Super view, μμ λ·° = Sub view
Sub View κ° μ¬λ¬κ°μΈ κ²½μ°?
Super View λ νλμ λ°°μ΄μ μ¬λ¬ κ°μ Sub view λ₯Ό μμλλ‘ μ μ₯νλ€. λ§μ½ νλμ Super view μ λΆν¬λͺ ν sub view λ κ°κ° κ²ΉμΉλ€λ©΄, λμ€μ μΆκ°λ sub view κ° λ§¨ μμ 보μΈλ€. λ sub view λͺ¨λ λ°ν¬λͺ ν κ²½μ° λͺ¨λ λ·°κ° μμ¬λ³΄μ΄κ² λλ€.
βοΈ λ·° κ³μΈ΅μ λ§λλ λ°©λ²?
Autolayout μ μ§μ νλ κ²½μ°μ λ§μ°¬κ°μ§λ‘, λ·° κ³μΈ΅μ λ§λλ λ°©λ²λ μΈν°νμ΄μ€ λΉλ(Storyboard)λ₯Ό μ΄μ©νλ λ°©λ², μ½λλ‘ μμ±νλ λ°©λ² λ κ°μ§κ° μλ€.
μ½λλ‘ λ·° κ³μΈ΅ μμ±/κ΄λ¦¬νκΈ°
- Sub View λ₯Ό SuperView μ μΆκ°νκΈ° :: SuperView.addSubView(_:) λ©μλ νΈμΆ
μΆκ°λ μλΈλ·°λ μνΌλ·°μ μλΈ λ·° λͺ©λ‘ 맨 λ§μ§λ§μ μΆκ°λλ€.
μλΈ λ·° λͺ©λ‘μ νΉμ μΈλ±μ€μ μ½μ νκ³ μΆμ κ²½μ°, SuperView.insertSubView(_at:) λ©μλλ₯Ό μ΄μ© - SuperView μμ SubView μ κ±°νκΈ° :: SubView.removeFromSuperView() λ©μλ νΈμΆ
- SuperView μ μλΈ λ·° λͺ©λ‘μ μ λ ¬νκΈ° :: bringSubView(toFront:), sendSubView(toBack:) λ©μλλ₯Ό μ΄μ©
μΈν°νμ΄μ€ λΉλλ₯Ό μ΄μ©ν΄μ λ·° κ³μΈ΅ μμ±/κ΄λ¦¬νκΈ°
- UI κ°μ²΄ λΌμ΄λΈλ¬λ¦¬μμ κΈ°μ‘΄μ View κ°μ²΄λ‘ λλκ·Έμ€ λλμΌλ‘ λ·° κ³μΈ΅μ μΆκ°νλ€.
- νλμ SuperView λ΄μ SubView λ‘λ Label, View κ° μ‘΄μ¬νλ€.
- ν°μ SubView λ Label μ SuperView κ° λλ€.
π€ μΈν°νμ΄μ€ λΉλμμ View Controller κ°μ²΄λ₯Ό μΆκ°νλ©΄ μ View κ° μλμΌλ‘ μΆκ°λ κΉ?
UIViewController λ μ€μ€λ‘ νλ©΄μ νμλλ κ°μ²΄κ° μλλ―λ‘, μμ μ΄ κ΄λ¦¬ν (μ½ν μΈ λ₯Ό 보μ¬μ€) View λ₯Ό λ°λμ κ°κ³ μμ΄μΌνλ€. κ·Έλ κΈ° λλ¬Έμ μΈν°νμ΄μ€λΉλμμ View Controller κ°μ²΄λ₯Ό μΆκ°ν κ²½μ°, View κ° μλμΌλ‘ μΆκ°λλ€.
βοΈ View μ μ’νκ³μ Frame vs Bounds
- UIKit μμ κΈ°λ³Έ μ’νκ³λ μ’μΈ‘ μλ¨ λͺ¨μ리λ₯Ό μμ μΌλ‘ νλ©°, μμ μΌλ‘λΆν° μλμͺ½, μ€λ₯Έμͺ½μΌλ‘ κ°μλ‘ κ°μ΄ 컀μ§λ€.
- View μ νλ μ(Frame) μ View μ ν¬κΈ°μ μμΉλ₯Ό SuperView μ μ’νκ³λ₯Ό κΈ°μ€μΌλ‘ λνλΈλ€.
- View μ λ°μ΄λ(Bounds) λ View μ ν¬κΈ°μ μμΉλ₯Ό ν΄λΉ λ·° μμ μ μ’νκ³λ₯Ό κΈ°μ€μΌλ‘ λνλΈλ€.
- View λ₯Ό νμ ν κ²½μ°, Frame μ λ³κ²½λ μ μμ§λ§, Bounds λ λ³κ²½λμ§ μλλ€.
- μλ μ΄λ―Έμ§μμ SubView μ Frame κ°μ 보면, SuperView κΈ°μ€μΌλ‘ κ°μ΄ λνλλ κ²μ νμΈν μ μλ€.
- SubView μ Frame μ’νλ₯Ό (0, 0) μΌλ‘ μ€μ νλλΌλ, SuperView λ°μΌλ‘ λ²μ΄λμ§ μλλ€.
- SuperView μ Frame κ°μ μ΅μλ¨ View μΈ μμ μ’νκ³ κΈ°μ€μΌλ‘ κ°μ΄ λνλ κ²μ΄λ€.
βοΈ View μ Frame, Bounds λ CGRect λΌλ ꡬ쑰체λ₯Ό ν΅ν΄ ννλλ€.
- CGRect :: μ¬κ°νμ ν¬κΈ°μ μμΉμ λν μ 보λ₯Ό λ΄κ³ μλ ꡬ쑰체
* CGRect :: (x, y, width, height) - CGRect.origin (property) :: CGPoint νμ
μΌλ‘ μ¬κ°νμ μμμ μ μ μ₯νκ³ μλ€.
* CGPoint :: (x, y) κ°μΌλ‘ μ’ν νν - CGRect.size (property) :: CGSize νμ
μΌλ‘ μ¬κ°νμ λμ΄μ λλΉλ₯Ό μ μ₯νκ³ μλ€.
* CGSize :: (width, height) κ°μΌλ‘ ν¬κΈ° νν
λ·°λ₯Ό μ μνκΈ° μν΄μλ 1) λ·°κ° μ΄λμ κ·Έλ €μ ΈμΌ ν μ§, 2) λ·°κ° μ΄λ€ ν¬κΈ°λ‘ κ·Έλ €μ ΈμΌ ν μ§ μμμΌ νλ€.
1) λ·°μ μμμ = CGPoint = x, y μ’ν
2) λ·°μ ν¬κΈ° = CGSize = width, height ν¬κΈ°
π€ λ·°μ μ’νκ³μμ νλ μκ³Ό λ°μ΄λκ° κ°κ° μλ μ΄μ λ λκΉμ? μ΄λ μν©μμ νλ μμ μ°κ³ , λ°μ΄λλ₯Ό μ°λ©΄ μ’μμ§ μκ°ν΄λ΄ μλ€.
Frame μ μ΄μ©ν κ²½μ°
- Super View κΈ°μ€μΌλ‘ λ·°λ₯Ό λ°°μΉν΄μΌ ν κ²½μ°. μ¦, UIView μ μμΉλ ν¬κΈ°λ₯Ό μ€μ νλ κ²½μ°
- μ€μ λ‘ Storyboard μμλ View μμΉ μ§μ μ frame κ°μ μ΄μ©νλ€.
Bounds λ₯Ό μ΄μ©ν κ²½μ°
- View λ΄λΆμ κ·Έλ¦Όμ κ·Έλ €μΌ ν κ²½μ°
- View λ₯Ό νμ ν κ²½μ°μ View μ ν¬κΈ°λ₯Ό μκ³ μΆμ λ (View λ΄λΆ μ’νμ΄λ―λ‘ κ°μ΄ λ³νμ§ μλλ€)
- ν΄λΉ View μ SubView λ€μ μ λ ¬νλ λ± λ΄λΆμ λ·°λ€μ μμΉλ₯Ό λ³κ²½ν κ²½μ°
π‘ View Hierarchy Debug Tool
View Hierarchy Debug Tool μ λ·°κ° μ΄λ»κ² ꡬμ±λμ΄ μλμ§, μ΄λ»κ² μμ¬μλμ§ νμΈν μ μλ ν΄μ΄λ€. μ¬μ΄μ¦ μΈμ€νν°λ‘ νμΈν΄λ³΄λ©΄, Autolayout μΌλ‘ μ€μ ν μ μ½μ΄ μ΄λ€κ² μλμ§, Frame/Bounds κ°λ€μ νμΈν μ μλ€.
* λ·°κ° λ³΅μ‘νκ² κΌ¬μΈλ€κ±°λ, μ€ν λ μ΄μμμ΄ μλͺ» μ μ©λλ€ μΆμλ κΌ νμΈνκΈ°
* λ·° κ³μΈ΅μ 맨 νλ¨(μΌμͺ½)μ 보면 UIWindow κ° κΉλ €μλ€.
μλμ μ§λ¬Έλ€μ λͺ νν λλ΅ν μ μλλ‘ νκΈ°!
- Bounds μ Frame μ μ°¨μ΄μ μ μ€λͺ νμμ€.
- View κ°μ²΄μ λν΄ μ€λͺ νμμ€.
- UIView μμ Layer κ°μ²΄λ 무μμ΄κ³ μ΄λ€ μν μ λ΄λΉνλμ§ μ€λͺ νμμ€.
- UIWindow κ°μ²΄μ μν μ 무μμΈκ°?
μ°Έκ³ λ§ν¬
'π iOS > UIKit' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[iOS] MVC ν¨ν΄ (Model - View - Controller) (0) | 2021.06.18 |
---|---|
[iOS] λμμΈ ν¨ν΄ & Singleton ν¨ν΄ μ μ©λ μ¬λ‘ (0) | 2021.06.16 |
[iOS] Autolayout μ μ μ©νλ©° UIλ₯Ό κ°λ°νλ λ² (2) | 2021.06.13 |
[iOS] iOS μ± κ°λ° νλ μμν¬ - CocoaPod, UIKit, Foundation (0) | 2021.06.13 |
[iOS/Swift] λͺ¨μλ¦¬κ° λ₯κ·Ό, κ·Έλ¦Όμκ° μ μ©λ νμ λ·° ꡬννκΈ° (2) | 2021.04.28 |