λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
🍎 iOS

[UIKit] UIView(1)

by hyebin (Helia) 2022. 3. 25.
λ°˜μ‘ν˜•

ViewλŠ” μ•± μ‚¬μš©μž μΈν„°νŽ˜μ΄μŠ€μ˜ κΈ°λ³Έ ꡬ성 μš”μ†Œμ΄λ©° UIView ν΄λž˜μŠ€λŠ” λͺ¨λ“  view에 곡톡적인 λ™μž‘μ„ μ •μ˜ν•©λ‹ˆλ‹€.

view κ°μ²΄λŠ” μ‚¬κ°ν˜• λ‚΄μ—μ„œ μ½˜ν…μΈ λ₯Ό λ Œλ”λ§ν•˜κ³  ν•΄λ‹Ή μ½˜ν…μΈ μ™€μ˜ λͺ¨λ“  μƒν˜Έμž‘μš©μ„ μ²˜λ¦¬ν•©λ‹ˆλ‹€.

UIView ν΄λž˜μŠ€λŠ” μΈμŠ€ν„΄μŠ€ν™”ν•˜κ³  κ³ μ •λœ 배경색을 ν‘œμ‹œν•˜λŠ” 데 μ‚¬μš©λ  수 μžˆλŠ” ꡬ상 ν΄λž˜μŠ€μž…λ‹ˆλ‹€.

더 μ •κ΅ν•œ 컨텐츠λ₯Ό 그리기 μœ„ν•΄μ„œ μ„œλΈŒν΄λž˜μŠ€ν™”ν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.

μ•±μ—μ„œ ν”νžˆ λ³Ό 수 μžˆλŠ” label, image, button 및 기타 μΈν„°νŽ˜μ΄μŠ€ μš”μ†Œλ₯Ό ν‘œμ‹œν•˜λ €λ©΄ 직접 μ •μ˜ν•˜κΈ°λ³΄λ‹€λŠ” UIKit ν”„λ ˆμž„μ›Œν¬μ—μ„œ μ œκ³΅ν•˜λŠ” λ·° ν•˜μœ„ 클래슀λ₯Ό μ‚¬μš©ν•˜μ„Έμš”.

 

view κ°μ²΄λŠ” 앱이 μ‚¬μš©μžμ™€ μƒν˜Έμž‘μš©ν•˜λŠ” 주된 방식이기 λ•Œλ¬Έμ— μ—¬λŸ¬ κ°€μ§€ μ±…μž„μ΄ μžˆμŠ΅λ‹ˆλ‹€.

λ‹€μŒμ€ λͺ‡ κ°€μ§€ μ˜ˆμž…λ‹ˆλ‹€.

  • 그리기와 μ• λ‹ˆλ©”μ΄μ…˜
    • λ·°λŠ” UIKit λ˜λŠ” Core Graphicsλ₯Ό μ‚¬μš©ν•˜μ—¬ μ§μ‚¬κ°ν˜• μ˜μ—­μ— μ½˜ν…μΈ λ₯Ό κ·Έλ¦½λ‹ˆλ‹€.
    • 일뢀 λ·° ν”„λ‘œνΌν‹°λ“€μ€ μƒˆλ‘œμš΄ κ°’μœΌλ‘œ μ• λ‹ˆλ©”μ΄μ…˜ 될 수 μžˆμŠ΅λ‹ˆλ‹€.
  • λ ˆμ΄μ•„μ›ƒκ³Ό μ„œλΈŒ λ·° 관리
    • λ·°λŠ” 0개 μ΄μƒμ˜ μ„œλΈŒ λ·°λ₯Ό κ°€μ§ˆ 수 μžˆμŠ΅λ‹ˆλ‹€.
    • λ·°λŠ” μ„œλΈŒ 뷰의 크기와 μœ„μΉ˜λ₯Ό μ‘°μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
    • μžλ™ λ ˆμ΄μ•„μ›ƒμ„ μ‚¬μš©ν•˜μ—¬ λ·° 계측 ꡬ쑰의 변화에 λŒ€μ‘ν•  수 μžˆλ„λ‘ 뷰의 크기와 μœ„μΉ˜λ₯Ό λ³€κ²½ν•˜λŠ” κ·œμΉ™μ„ μ •μ˜ν•©λ‹ˆλ‹€.
  • 이벀트 처리
    • λ·°λŠ” UIResponder의 ν•˜μœ„ 클래슀이기 λ•Œλ¬Έμ— ν„°μΉ˜λ‚˜ 기타 λ‹€λ₯Έ μ΄λ²€νŠΈμ— 응닡 κ°€λŠ₯ν•©λ‹ˆλ‹€.
    • λ·°λŠ” 일반 제슀처λ₯Ό μ²˜λ¦¬ν•˜κΈ° μœ„ν•΄ 제슀처 인식기가 μ„€μΉ˜λ  수 μžˆμŠ΅λ‹ˆλ‹€.

 

 

λ·°λŠ” λ‹€λ₯Έ λ·° 내뢀에 μ€‘μ²©λ˜μ–΄ λ·° 계측 ꡬ쑰λ₯Ό μƒμ„±ν•˜μ—¬ κ΄€λ ¨ μ½˜ν…μΈ λ₯Ό νŽΈλ¦¬ν•˜κ²Œ ꡬ성할 수 μžˆμŠ΅λ‹ˆλ‹€.

λ·°λ₯Ό μ€‘μ²©ν•˜λ©΄ μ€‘μ²©λœ μžμ‹ λ·°(subview)와 λΆ€λͺ¨ λ·°(superview) μ‚¬μ΄μ˜ λΆ€λͺ¨-μžμ‹ 관계가 μƒμ„±λ©λ‹ˆλ‹€.

λΆ€λͺ¨ λ·°μ—λŠ” μ—¬λŸ¬ 개의 μžμ‹ λ·°κ°€ 포함될 수 μžˆμ§€λ§Œ 각 μžμ‹ λ·°μ—λŠ” ν•˜λ‚˜μ˜ λΆ€λͺ¨ 뷰만 μžˆμŠ΅λ‹ˆλ‹€.

기본적으둜 μžμ‹ 뷰의 λ³΄μ΄λŠ” μ˜μ—­μ΄ λΆ€λͺ¨ 뷰의 λ²”μœ„λ₯Ό λ²—μ–΄λ‚˜ ν™•μž₯λ˜μ–΄λ„ μžμ‹ 뷰의 λ‚΄μš©μ΄ μž˜λ¦¬μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

ν•΄λ‹Ή λ™μž‘ 방식을 λ³€κ²½ν•˜λ €λ©΄  clipsToBounds 속성을 μ‚¬μš©ν•΄μ•Ό ν•©λ‹ˆλ‹€.

clipsToBounds: Bool {get set}
μžμ‹ λ·°κ°€ 뷰의 κ²½κ³„λ‘œ μ œν•œλ˜λŠ”μ§€ μ—¬λΆ€λ₯Ό κ²°μ •ν•˜λŠ” Bool κ°’
true둜 ν•˜λ©΄ μžμ‹ 뷰의 λ‚΄μš©μ΄ 잘리고, false둜 μ„€μ •ν•˜λ©΄ μž˜λ¦¬μ§€ μ•ŠμŒ

 

각 뷰의 λ²”μœ„λŠ” κ·Έ frameκ³Ό 경계(bounds) 속성에 μ˜ν•΄ κ²°μ •λ©λ‹ˆλ‹€.

frame 속성은 λΆ€λͺ¨ 뷰의 μ’Œν‘œκ³„μ—μ„œ 뷰의 원점과 크기λ₯Ό μ •μ˜ν•©λ‹ˆλ‹€.

bounds 속성은 뷰의 내뢀적인 수치λ₯Ό μ •μ˜ν•˜λ©° μ»€μŠ€ν…€ 그리기 μ½”λ“œμ—μ„œλ§Œ λ…μ μ μœΌλ‘œ μ‚¬μš©λ©λ‹ˆλ‹€.

center 속성을 μ‚¬μš©ν•˜λ©΄ frameμ΄λ‚˜ bounds 속성을 직접 λ³€κ²½ν•˜μ§€ μ•Šκ³ λ„ 뷰의 μœ„μΉ˜λ₯Ό μ‰½κ²Œ λ³€κ²½ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

 

λ°˜μ‘ν˜•

'🍎 iOS' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

[UIKit] UIView(3)  (0) 2022.03.30
[UIKit] UIView(2)  (0) 2022.03.28
[UIKit] UIApplication  (0) 2022.03.24
[UIKit] μ•±μ˜ 라이프 사이클  (0) 2022.03.22
UIKit  (0) 2022.03.21