-
[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 } ์ด๋ฏ๋ก ๊ฐ์ ์์ ํ๋ฉด ๋ทฐ๊ฐ ์ด๋ป๊ฒ ๋ณํ๋์ง ์ง์ ํ์ธํด๋ณด์๋ฉด ์ข๊ฒ ์ต๋๋ค.
๋!
์ฐธ๊ณ ํ๋ฉด ์ข์ ์๋ฃ๐ฏ
- [UIView - frame] developer.apple.com/documentation/uikit/uiview/1622621-frame
- [UIView - bounds] developer.apple.com/documentation/uikit/uiview/1622580-bounds
๐ค๐ข[์ฐ์งฑ์ iOS ๋ธ๋ก๊ทธ]๐ต๐ป
iOS๋ฅผ ๊ณต๋ถํ๋ฉด์ ๋ฐฐ์ด ๋ด์ฉ์ ๊ธฐ๋กํ๊ณ ์์ต๋๋ค.'iOS > ๐ค App' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[UIKit] ๋ทฐ ํ๊น ์ฌ์ฉํด๋ณด๊ธฐ (View Tagging) (0) 2021.03.05 [iOS] MVC ๋? (feat. Cocoa MVC) (0) 2021.03.03 [iOS] About the App Launch Sequence (์ฑ ์คํ ์์ ์ ์ผ์ด๋๋ ์ผ๋ค) (1) 2021.02.02 [iOS] UIApplication ์ด๋? (0) 2021.01.28 [iOS] Responding to the Launch of Your App (๊ณต์๋ฌธ์ ์ ๋ฆฌ) (0) 2021.01.28