ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [iOS] Frame κ³Ό Bounds 의 곡톡점과 차이점
    iOS/πŸ€– App 2021. 2. 4. 10:46

    곡톡점

    iOS μ—μ„œ Frame κ³Ό Bounds λŠ” λ·°μ˜ μ’Œν‘œμ™€ 수치λ₯Ό λ‚˜νƒ€λ‚΄λŠ” κ΅¬μ‘°μ²΄μž…λ‹ˆλ‹€.

     

    λ”°λΌμ„œ UIView μΈμŠ€ν„΄μŠ€μ΄κ±°λ‚˜ UIView 클래슀λ₯Ό μƒμ†ν•œ μΈμŠ€ν„΄μŠ€λŠ” .frame κ³Ό .bounds 속성을 가지고 μžˆμŠ΅λ‹ˆλ‹€.

     

    μ’Œν‘œλŠ” μœ„μΉ˜λ₯Ό ν‘œν˜„ν•˜λŠ” μˆ˜λ‹¨μ΄κ³ , iOS μ—μ„œλŠ” 2차원 μ’Œν‘œκ³„λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€.

     

    μˆ˜μΉ˜λŠ” κ³΅μ‹λ¬Έμ„œμ— `dimensions` λΌλŠ” λ‹¨μ–΄λ‘œ ν‘œν˜„λ˜μ–΄ 있고, μ—¬κΈ°μ„œλŠ” width(λ„ˆλΉ„) 와 height(높이) 값을 λ‚˜νƒ€λƒ…λ‹ˆλ‹€.

     

    μš°μ„  Frame κ³Ό Bounds의 νƒ€μž…은 λͺ¨λ‘ CGRect μž…λ‹ˆλ‹€.

     

    그리고 CGRect 의 μ£Όμš” 속성은 origin κ³Ό size μž…λ‹ˆλ‹€. origin 은 CGPoint νƒ€μž…, size λŠ” CGSize νƒ€μž…μž…λ‹ˆλ‹€.

     

    즉, Frame κ³Ό Bounds λŠ” μ’Œν‘œλ₯Ό orign μ†μ„±μœΌλ‘œ, 크기(ν˜Ήμ€ 수치)λ₯Ό size μ†μ„±μœΌλ‘œ ν‘œν˜„ν•©λ‹ˆλ‹€.

     

    μ’Œν‘œμ˜ 기쀀은 μ™Όμͺ½ 상단뢀터 (0,0) 이고 xμΆ• y좕은 μ’Œν‘œν‰λ©΄κ³„μ™€ λ™μΌν•©λ‹ˆλ‹€. λ‹¨μœ„λŠ” 포인트 μž…λ‹ˆλ‹€.

     

     

     


    이듀 μ•žμ— λΆ™λŠ” CGλŠ” Core Graphics ν”„λ ˆμž„μ›Œν¬λ₯Ό 가리킀며, CGκ°€ 뢙은 νƒ€μž…λ“€μ€ κ΄€λ ¨ ν”„λ ˆμž„μ›Œν¬μ—μ„œ μ‚¬μš©λ©λ‹ˆλ‹€.

    CGRect와 CGPoint, CGSize의 ꡬ성은 κΈ€ μ•„λž˜μ—μ„œ λ‹€λ£¨μ—ˆμŠ΅λ‹ˆλ‹€.

    μΆ”κ°€μ μœΌλ‘œ CGPoint λŠ”  CGFloat νƒ€μž…μ˜ 속성 x , y λ₯Ό 가지고 μžˆλŠ”λ°, CGFloat νƒ€μž…μ€ 64λΉ„νŠΈ ν™˜κ²½μ—μ„œ Double κ³Ό κ°™μŠ΅λ‹ˆλ‹€.

     

    차이점

    Frame의 νŠΉμ§•

    var frame: CGRect { get set }

     

    뷰의 νŠΉμ§• 쀑 ν•˜λ‚˜λŠ” λ‹€λ₯Έ λ·°λ₯Ό 포함할 수 μžˆλ‹€λŠ” 것 μž…λ‹ˆλ‹€.

    이런 λ·°λ₯Ό μ»¨ν…Œμ΄λ„ˆ 뷰라고 λΆ€λ¦…λ‹ˆλ‹€.

     

    μ»¨ν…Œμ΄λ„ˆλ·°μ—μ„œ μƒμœ„κ³„μΈ΅μ˜ κΈ°μ‘΄ λ·°λ₯Ό Superview , ν•˜μœ„ κ³„μΈ΅μ˜ ν¬ν•¨λœ λ·°λ₯Ό Subview 라고 λΆ€λ¦…λ‹ˆλ‹€.

     

    Frame 은 Supreview λ₯Ό κΈ°μ€€μœΌλ‘œ μžμ‹ μ˜ μœ„μΉ˜μ™€ 크기λ₯Ό ν‘œν˜„ν•©λ‹ˆλ‹€.

     

    μ•„λž˜ μ½”λ“œλ₯Ό λ³΄μ‹œλ©΄, CGRect νƒ€μž… 은 λ³€μˆ˜ origin κ³Ό size둜 κ΅¬μ„±λ˜μ–΄μžˆμŒμ„ λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€.

     

    origin은 Superviewμ—μ„œ ν•΄λ‹Ή 뷰의 μœ„μΉ˜ λ₯Ό λ‚˜νƒ€λ‚΄κ³ ,

    size λŠ” width 와  height 둜 크기 λ₯Ό λ‚˜νƒ€λƒ…λ‹ˆλ‹€.

     

    var frame: CGRect
    
    /* CGRect 의 ꡬ쑰 */
    struct CGRect {
      var origin: CGPoint
      var size: CGSize
    }
    
    /* CGPoint 의 ꡬ쑰 */
    struct CGPoint {
      var x: CGFloat
      var y: CGFloat
    }
    
    /* CGSize 의 ꡬ쑰 */
    struct CGSize {
      var width: CGFloat
      var height: CGFloat
    }

     

    μ„€λͺ…은 이 μ •λ„μ—μ„œ λ§Ίκ³  Xcodeμ—μ„œ μ½˜μ†”μ— 값을 직접 μ°μ–΄μ„œ 확인해 λ³΄κ² μŠ΅λ‹ˆλ‹€!!πŸ™‚

     

     

    초기 μ„€μ •

     

     

    μœ„ μ‚¬μ§„μ—μ„œ Red View 와 Green VIew 의 Superview λŠ” λͺ¨λ‘ View 라고 μ ν˜€μžˆλŠ” μ΅œμƒμœ„ λ·°(Content View)둜 κ°™μŠ΅λ‹ˆλ‹€.


     

     

    이제 Green View λ₯Ό μ΄λ™μ‹œμΌœ λ³΄κ² μŠ΅λ‹ˆλ‹€.

     

    μ•„λž˜ 첫번째 사진은 λ‹¨μˆœνžˆ Green Viewλ₯Ό 이동 μ‹œν‚¨ κ²ƒμž…λ‹ˆλ‹€.

     

    μ•„λž˜ λ‘λ²ˆμ§Έ 사진은 μ΄λ™ν•œ Green View 의  Superview λ₯Ό Red View 둜 λ³€κ²½ ν•œ κ²ƒμž…λ‹ˆλ‹€.

     

    Superview 변경에 λ”°λ₯Έ frame μ†μ„±μ˜  x, y κ°’ λ³€ν™”λ₯Ό μžμ„Ένžˆ μ‚΄νŽ΄ 봐 μ£Όμ„Έμš”!

     

     

     

     

     

     

     

    μœ„ μ‚¬μ§„μ—μ„œ,  Green View 의  frame μ†μ„±μ˜ x, y 값이 각각 `77.0 -> 0` 으둜 `265.0 -> 70.0` 으둜 λ³€κ²½λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

     

    Frame 은  Superview λ₯Ό κΈ°μ€€μœΌλ‘œ μžμ‹ μ˜ μœ„μΉ˜λ₯Ό λ‚˜νƒ€λ‚΄κΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€.

     

    ν¬κΈ°λŠ” μœ„μΉ˜μ— 영ν–₯을 받지 μ•Šκ³ , Green View 의 크기 μžμ²΄λ„ λ³€κ²½λ˜μ§€ μ•Šμ•˜μœΌλ‹ˆ κ·ΈλŒ€λ‘œ μž…λ‹ˆλ‹€.

     

    μš°λ¦¬κ°€ 생각해봐야될 것은 λ¬΄μ—‡μΌκΉŒμš”?

    1. κ²‰λ³΄κΈ°μ—λŠ” λ˜‘κ°™μ΄ μƒκ²Όμ§€λ§Œ, 뷰의 계측 ꡬ쑰가 λ‹€λ₯Ό 수 μžˆλ‹€λŠ” 것과

    λ˜ν•œ 뷰의 계측 κ΅¬μ‘°λŠ” Document Outline μ—μ„œ κ°„λ‹¨ν•˜κ²Œ 확인할 수 μžˆμŠ΅λ‹ˆλ‹€

     

    2. Frame에 의미λ₯Ό λ‹€μ‹œ ν•œλ²ˆ μƒκΈ°ν•˜κ³  λ„˜μ–΄κ°€λŠ” 것 정도가 λ˜κ² μŠ΅λ‹ˆλ‹€.

    Superview λ₯Ό κΈ°μ€€μœΌλ‘œ x, y 값을 μ •ν•œλ‹€λŠ” 것!

     


     

    Bounds의 νŠΉμ§•

    var bounds: CGRect { get set }

     

    Bounds λŠ” λ·° μžμ‹ μ„ κΈ°μ€€μœΌλ‘œ 뷰의 ν¬κΈ°λ§Œμ„ λ‚˜νƒ€λƒ…λ‹ˆλ‹€.

     

    μ‹€μŠ΅μ— μ‚¬μš©ν•œ Red View 와 Green View 의 bounds 값을 찍어 λ³΄κ² μŠ΅λ‹ˆλ‹€.

     

     

     

     

    bounds 의 origin은 μžμ‹ μ„ κΈ°μ€€μœΌλ‘œ ν•˜λ―€λ‘œ x, y 값은 0.0 으둜 λ‚˜μ˜€λŠ” 것을 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.

     

    { get set }  μ΄λ―€λ‘œ 값을 μˆ˜μ •ν•˜λ©΄ λ·°κ°€ μ–΄λ–»κ²Œ λ³€ν•˜λŠ”μ§€ 직접 ν™•μΈν•΄λ³΄μ‹œλ©΄ μ’‹κ² μŠ΅λ‹ˆλ‹€.

     

     

     

    끝!


     

    μ°Έκ³ ν•˜λ©΄ 쒋은 자료🍯

    1. [UIView - frame] developer.apple.com/documentation/uikit/uiview/1622621-frame
    2. [UIView - bounds] developer.apple.com/documentation/uikit/uiview/1622580-bounds
    πŸ€–πŸŸ’[우짱의 iOS λΈ”λ‘œκ·Έ]πŸ”΅πŸ’»

    iOSλ₯Ό κ³΅λΆ€ν•˜λ©΄μ„œ 배운 λ‚΄μš©μ„ κΈ°λ‘ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

    λŒ“κΈ€

μ–΄μ œλ³΄λ‹€ λ°œμ „ν•œ λ‚˜