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๋ฅผ ๊ณต๋ถ€ํ•˜๋ฉด์„œ ๋ฐฐ์šด ๋‚ด์šฉ์„ ๊ธฐ๋กํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

    ๋Œ“๊ธ€

์–ด์ œ๋ณด๋‹ค ๋ฐœ์ „ํ•œ ๋‚˜