- Published on
๐ฑ iOS - Bounds vs Frame
- Authors
- Name
- ์ด์ฐฝ์ค
์ค๋์ frame
๊ณผ bounds
์ ์ค์ฒด์ ์ฐจ์ด์ ์ ๋ํด ๊ณต๋ถํด๋ณผ๊ฑฐ์์. ๋ ์น๊ตฌ ๋ชจ๋ ์ฝ๋ ์์์ UIView
์ ๋ณ๊ฒฝ์ ๊ฐํ ๋ ์์ฃผ ๋ณด๊ฒ ๋๋ ์ฉ์ด๋ค์ด์ฃ . ๊ทผ๋ฐ ์ง๊ธ๊น์ง๋ ๊ทธ๋ฅ ๋ ๋ค ์จ๋ณด๊ณ ์ ๊ฐ ์ํ๋ ํ๋กํผํฐ๊ฐ ์์ผ๋ฉด ์ฌ์ฉํ๊ณค ํ์ต๋๋ค. view.bounds.width = 32.0
์ ๊ฐ์ ์์
๋ค์ด์.
๊ทธ๋์ ๋ ๊ฐ์ง๋ฅผ ๊ณต์ ๋ฌธ์์์ ์ฐพ์๋ณด์์ต๋๋ค.
์ฐ์ ๋์ ๋๋ ์ ์ ๋ ๊ฐ์ง ๋ชจ๋ CGRect
๋ผ๋ ํ์
์ผ๋ก ์ ์๋์ด ์๋ค๋ ์ ์
๋๋ค. CGRect
์ด ์น๊ตฌ๋ ๋ญ๊ฐ ์๋ฌด ์๊ฐ์์ด ์ฌ์ฉํ์๋๋ฐ ์ ๋๋ก ์์๋ณธ ์ ์ ์๋ค์. ๊ทธ๋์ ๋จผ์ CGRect
์ ๋ํด์ ์์๋ณด๊ฒ ์ต๋๋ค.
CGRect
์ผ๋จ ๋ฐ๋ณต๋ ์ฌ์ฉ์ผ๋ก ์ธํด์ ์ด ์์ด๊ฐ ๋์ถฉ View์ ์์ญ์ ํํํ๋ค๋ ์ ์ ์๊ณ ์์ต๋๋ค. ์ ๊ณต๋๋ ์์ฑ์๋ค์ ๋ณด๋ฉด
init(origin: CGPoint, size: CGSize)
init(x: Double, y: Double, width: Double, height: Double)
init(x: Int, y: Int, Width: Int, height: Int)
init(x: CGFloat, y: CGFloat, width: CGFloat, height: CGFloat)
์ด๋ฐ ์์ผ๋ก ์ขํ๊ฐ๊ณผ ๋์ด, ๋์ด๋ฅผ ๋ฐ๊ณ ์๊ฑฐ๋ ์.
๊ทธ๋ฆฌ๊ณ ์ด์ ์ ํ์ ์ค๋ช ์ ๋ด ์๋ค.
A structure that contains the location and dimensions of a rectangle.
์ฐ์ CGRect
๋ ๋ค๋ฅธ ๊ธฐ๋ณธ ํ์
๋ค๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ๊ตฌ์กฐ์ฒด์ธ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ฌ๊ฐํ์ ์์น์ ํฌ๊ธฐ ์ ๋ณด๋ฅผ ์ง๋๋ ๊ตฌ์กฐ์ฒด๋ผ๊ณ ํ๋ค์!
์ด๋์ ๋ ๊ฐ์ผ๋ก ์๋ ๊ฑฐ์ ๊ทธ๋๋ก๋ค์. ๊ทธ๋ฆฌ๊ณ Rect๋ ์ฌ๊ฐํ์ ํํํ๋ ์๋ช ์ด์์ต๋๋ค.
๊ทธ๋ฌ๋ฉด ์ด์ ๋ค ์์๋์ด์. CGRect
๋ ์ด๋ค ํ ๊ธฐ์ค์ (origin) ๊ณผ ํฌ๊ธฐ(size) ๋ฅผ ๊ฐ๊ณ ์ฌ๊ฐํ์ ํํํ๋ ๊ตฌ์กฐ์ฒด์ธ ๊ฒ์ด์ฃ .
๊ฐ์ฅ ์ฒซ ๋ฒ์งธ ์์ฑ์๋ฅผ ๋ณด๋ฉด CGPoint
ํ์
์ ๊ธฐ์ค์ ๊ณผ CGSize
ํ์
์ ํฌ๊ธฐ๋ฅผ ์ง์ ํด์ฃผ๋ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค.
์ด ๋ ๊ฐ์ง์ ๋ํด์๋ ๊ฐ๋ตํ๊ฒ ์ดํด๋ณด๋ฉด,
CGPoint
: ์ขํ๋ฅผ ๋ํ๋ด๋ ํ์- ex: (1, 2)
- CGSize: ํฌ๊ธฐ๋ฅผ ๋ํ๋ด๋ ํ์
- ex: 15(width) * 4(height)
์ฌ๊ฐํ์ ๋ํ์ด๊ธฐ ๋๋ฌธ์ ๊ทธ๋ฆผ์ผ๋ก ๋ณผ ๋ ๊ฐ์ฅ ์ดํด๊ฐ ๋น ๋ฅด๊ฒ ์ฃ ? ์ ์ฌ์ง๊ณผ ๊ฐ์ด ๊ธฐ์ค์ (origin)๊ณผ ๊ทธ ๊ธฐ์ค์ ์ ๊ธฐ์ค์ผ๋ก ์ฌ๊ฐํ์ ๊ทธ๋ฆด ํฌ๊ธฐ(size) ๊ฐ์ ๊ฐ๋ ๊ฒ์ด ๋ฐ๋ก CGRect
์ธ ๊ฒ์
๋๋ค. ์ฝ๊ฒ ๋งํ๋ฉด CGRect
๋ โ์ด๋์ ์ด๋ค ํฌ๊ธฐ๋ก UI ์์๋ฅผ ๊ทธ๋ฆฌ๊ฒ ๋ค.โ๋ฅผ ์ฌ๊ฐํ ์์ญ์ผ๋ก ์ง์ ํด ์ค ๋ ์ฌ์ฉํ๋ ๊ตฌ์กฐ์ฒด์
๋๋ค.
ํ ๊ฐ์ง๋ง ์ ์ํ๋ฉด ๋ ๊ฒ ๊ฐ์ต๋๋ค. width
๋ ๊ธฐ์ค์ ์ ๊ธฐ์ค์ผ๋ก ์ค๋ฅธ์ชฝ์ด positive, height
๋ ๊ธฐ์ค์ ์ ๊ธฐ์ค์ผ๋ก ์๋์ชฝ์ด positive์
๋๋ค.
frame, bounds
์ด์ ๋ค์ ๋์๊ฐ์ frame
๊ณผ bounds
์ ๋ํด์ ์์๋ณด๊ฒ ์ต๋๋ค. ๊ฐ๊ฐ์ ์ค๋ช
์ ํ ๋ฒ ๋ณผ๊น์?
frame:
The frame rectangle, which describes the viewโs location and size in its superviewโs coordinate system.
frame
์ superview
(์์ view)์ ์ขํ ์์์ view
์ ์์น์ ํฌ๊ธฐ๋ฅผ ์ ์ํฉ๋๋ค.
bounds:
The bounds rectangle, which describes the viewโs location and size in its own coordinate system.
bounds
๋ ๋ณธ์ธ์ ๊ณ ์ ํ ์ขํ ์์์ ์์น์ ํฌ๊ธฐ๋ฅผ ์ ์ํฉ๋๋ค.
์์ง ๋ป์ ์ ํํ๊ฒ ๋ชจ๋ฅด๊ฒ ์ง๋ง ๊ฐ์ฅ ์ค์ํ ์ฐจ์ด์ ์ด ๋ณด์
๋๋ค. frame
์ ์์ view์ ์ขํ ์์์ CGRect
๊ฐ ์ ์๋๋ค๋ ๊ฒ์ด๊ณ , bounds
๋ ๊ณ ์ ํ ์ขํ ์์์ CGRect
๊ฐ ์ ์๋๋ค๋ ๊ฒ์ด์ฃ .
๊ทธ๋๋ ๊ฐ์ด ์กฐ๊ธ์ ์ค๋ frame
๋ถํฐ ํ์ธํด๋ณด๊ฒ ์ต๋๋ค.
frame
์ด๋ ๊ฒ ์๊ธด ํ๋ฉด ๊ตฌ์ฑ์ด ์๋ค๊ณ ๊ฐ์ ํด๋ด ์๋ค.
โSuperView โก๏ธ ParentView โก๏ธ ChildViewโ์ ๊ณ์ธต ๊ตฌ์กฐ๋ฅผ ๊ฐ๊ณ ์์ต๋๋ค. ๊ฐ๊ฐ์ ํ์ view๋ ์์ view์ nested๋์ด ์์ต๋๋ค.
์ง๊ธ ์ด ์ํ์์ ParentView์ ChildView์ frame
์ ์ถ๋ ฅํ๋ฉด ์ด๋ค ๊ฐ์ด ๋์ค๋์ง ํ ๋ฒ ๋ณผ๊ฒ์.
frame
์ ์์ View ์์์์ CGRect
๋ผ๊ณ ํ์ต๋๋ค. ์ ์ถ๋ ฅ์ ์์๋๋ก x์ขํ, y์ขํ, ๋๋น, ๋์ด์์ฃ ?
ParentView์ CGPoint
์ CGSize
์ ์์น๋ฅผ ๋ฉ๊ฒจ๋ณด์์ต๋๋ค. frame
์ ์ด๋์ ๋ ๋๋์ด ์ค์ฃ ?
ParentView์ ๊ธฐ์ค์ (origin)์ด ์์ ๋ทฐ์ธ SuperView์ ๊ธฐ์ค์ (origin)์์ (24, 186)
๋งํผ ๋จ์ด์ ธ์๊ณ , ํฌ๊ธฐ(size)๋ (342, 472)
๋ผ๋ ๊ฒ์ด์ฃ !
frame
์ ์ค๋ช
๊ทธ๋๋ก ํด๋น View์ ์์ View์ ๋ํ ์ขํ๊ฐ์ด๋ผ๋ ๊ฒ์ ์ ์ ์์ต๋๋ค.
์ ๋๋ก ์ดํดํ ๊ฒ์ธ์ง ํ์ธํ๊ธฐ ์ํด์ ParentView์ ๊ธฐ์ค์ (origin)์ ํ๋ฒ (0, 0)์ผ๋ก ๋ฐ๊ฟ๋ณด์์ต๋๋ค. ๋์์ ํฌ๊ธฐ(size)๋ (320, 380)์ผ๋ก ์ค์ฌ๋ด ์๋ค.
์ผ์ชฝ์ด ๋ณ๊ฒฝ ์ , ์ค๋ฅธ์ชฝ์ด ๋ณ๊ฒฝ ํ์
๋๋ค. ์ ๋ณด๋ฉด, Child View๋ ๋ณํ ๊ฒ ์์ต๋๋ค. ์ ๋์ ์ธ ์์น๋ Parent View์ ์์น๊ฐ ๋ฐ๋์๊ธฐ ๋๋ฌธ์ ๊ฐ์ด ๋ฐ๋ ๊ฒ์ด๊ณ , ๊ธฐ์ค์ (origin)์ด๋ ํฌ๊ธฐ(size)๋ ๊ทธ๋๋ก ์ ์ง๋์์ต๋๋ค. ParentView์ CGRect
๋ ๋น์ฐํ๊ฒ ๋ณ๊ฒฝ๋์์ต๋๋ค. ๊ธฐ์ค์ (origin)์ ์ขํ๊ฐ (0, 0)์ด ๋์๊ณ , ํฌ๊ธฐ๋ (320, 380)์ผ๋ก ์ค์ด๋ค์์ต๋๋ค.
์ด์ ํ์คํ๊ฒ ์ ๊ฒ ๊ฐ์ต๋๋ค! frame
์ ์์ View์ ๋ํ ์ขํ๊ฐ์ด๊ธฐ ๋๋ฌธ์ ์์ View์ ๊ธฐ์ค์ (origin)์ด ์ด๋ํ๋ฉด ํจ๊ป ์ด๋ํ๋ ๊ฒ์ด์ฃ .
bounds
์ด๋ฒ์ ์ค๋ช
์ด ์กฐ๊ธ ๋ชจํธํ bounds
๋ฅผ ์์๋ณด๊ฒ ์ต๋๋ค. ์ฐ์ ์๊น ์์๋ฅผ ๊ทธ๋๋ก ๊ฐ์ ธ์์ bounds
๊ฐ์ ์ฐ์ด๋ณด์์ต๋๋ค.
๋ View ๋ชจ๋ ๊ธฐ์ค์ (origin) ์ด (0, 0)์ด ๋์ค๋ค์..?? ๐ค
๋ค ๊ทธ๋ ์ต๋๋ค.. frame
๊ณผ ๋ค๋ฅด๊ฒ bounds
๋ โ๋ณธ์ธ์ ๊ณ ์ ํ ์ขํโ๋ผ๋ ๋ง์์ ์ ์ ์๋ฏ์ด ์์ View์๋ ์๋ฌด๋ฐ ๊ด๋ จ ์์ด ๊ฐ๋ ๊ฐ์
๋๋ค.
์ ์ฌ๊ธฐ๊น์ง ์๊ฒ ๊ณ , ๊ทธ๋ผ bounds
๊ฐ์ ๋ณํ์ ์ค๋ณผ๊น์?
self.parentView.bounds.origin = CGPoint(x: 50, y: 100)
์ด๋ ๊ฒ ํ ๋ฒ Parent View์ bounds
๋ฅผ (50, 100)๋งํผ ์ด๋์์ผ๋ณผ๊ฒ์.
์.. ParentView๋ ๊ฐ๋งํ ์๊ณ , ChildView๊ฐ ์ผ์ชฝ ์๋ก ์ด๋ํ์ต๋๋ค. ๐ค๐ค๐ค
์ ํ ๋ชจ๋ฅด๊ฒ ๋ค์. ์์ฃ ..?
bounds
๋ฅผ ์ดํดํ๊ธฐ ์ํด์๋ ์ ํ๋ฉด์ ์กฐ๊ธ ๋ ๋๊ฒ ๋ณผ ํ์๊ฐ ์์ต๋๋ค. frame
์ด์ผ ์ ์ฌ๊ฐํ์ View ์์ฒด๋ฅผ ์ด๋์ํจ ๊ฒ์ด ๋ง์ต๋๋ค. ํ์ง๋ง bounds
์ ๊ฒฝ์ฐ์๋ View๋ฅผ ์์ง์ด๋๊ฒ ์๋๋ผ ํด๋น View ์์์ ๋ณด์ด๋ ๊ณต๊ฐ์ ์ขํ๋ฅผ ๋ฐ๊ฟ์ค๋ค๋ ์๋ฏธ์
๋๋ค.
๋ค ์ด๋ ต์ฃ ..? (์๋๊ฐ์? ์ ๋ง ์ด๋ ต๋์?)
๊ทธ๋ฌ๋๊น ์ฐ๋ฆฌ๊ฐ ์ฌ์ง์ ํ๋ํด์ ๋ณผ ๋ ํ ์ ์ ์ฐ๊ณ ๋๋๊ทธ๋ฅผ ํ์ฃ ?
์ ํฌ์ธํฐ ์์์์?
์ด ํฌ์ธํฐ๋ก ๋ฑ ์ฐ์ ๊ทธ ์ ์ด ๋ฐ๋ก ๊ธฐ์ค์ (origin)์ด๋ผ๊ณ ์๊ฐํ๊ณ , ๊ทธ ์ ์ ๋๋ฅด๊ณ ์ค๋ฅธ์ชฝ ์๋(50, 100)๋ก ๋ด๋ฆฐ๊ฒ๋๋ค!
๊ทธ๋ฌ๋ฉด ์ฌ์ง์ ์ด๋ป๊ฒ ๋๋์? ์ผ์ชฝ ์๋ก ์ฌ๋ผ๊ฐ๋๋ค.
ParentView๋ ์์ ์๋ ๋ค๋ฅธ View๋ค์ ๋ด๊ณ ์๋ ํ๋์ ๋ ๋ค๋ฅธ ํ๋ฉด์ด๋ผ๊ณ ์๊ฐํ๋ฉด ๋ฉ๋๋ค. ๊ทธ ํ๋ฉด์์ ๋๋๊ทธ๋ฅผ ํด์ ๋ณด๊ณ ์๋ ํ๋ฉด์ ์ฎ๊ธฐ๋ ๊ฒ์ด์ฃ .
๊ทผ๋ฐ ์ ๊ฒ ํ๋ฉด์ด๋ฉด, ๋ฐ์ผ๋ก ํ์ด๋์ค๋ฉด ์๋๋ ๊ฑฐ ์๋๊ฐ์?
๋ง์์. ๊ทธ๋์ ํ์ด๋์ค์ง ์๋๋ก ํด์ค ์๋ ์์ต๋๋ค. clipsToBounds
๋ผ๋ ์ดํธ๋ฆฌ๋ทฐํธ๋ฅผ true
๋ก ํด์ฃผ๋ฉด
์ด๋ ๊ฒ ํ๋ฉด์์ ๋ฒ์ด๋ View๋ฅผ ์๋ผ์ ํํํ ์ ์์ต๋๋ค.
์ ๊ทธ๋ฐ๋ฐ ์์์ ์ดํด๋ฅผ ๋๊ธฐ ์ํด์ ์ด๋ฏธ์ง๋ฅผ ํ๋ํด์ ๋๋๊ทธํ๋ ์ํฉ์ ์์๋ก ๋ค์์์ฃ ? ์ฌ์ค ์ ํํ ์ด ์ํฉ์ ์ฌ์ฉํ๋ UI ์ปดํฌ๋ํธ๊ฐ ํ๋ ์์ต๋๋ค. ๋ฐ๋ก ScrollView์์. ScrollView์์ ๋๋๊ทธ๋ฅผ ํ ๋ ์ฌ์ค์ ๋ด๋ถ์ ์ผ๋ก ํด๋น View์ bounds
๋ฅผ ๊ณ์ํด์ ๋ฐ๊ฟ์ฃผ๊ณ ์๋ ๊ฒ๋๋ค. ์ด๋ฐ ์ฌ์ค์ ScrollView์ contentOffset
์ ์ถ๋ ฅํด๋ณด๋ฉด ํ์ธํด๋ณผ ์ ์์ต๋๋ค.
๊ทธ๋ฐ๋ฐ ํน์
size
๋frame
๊ณผbounds
์์ ๋ณ ์ฐจ์ด๊ฐ ์์ด์ ์ธ๊ธ์ด ์๋๊ฑด๊ฐ์?
์๋๋๋ค. ์๋นํ ํฐ ์ฐจ์ด๊ฐ ์์ด์. ์ง๊ธ๊น์ง ์ฐ๋ฆฌ๋ ๊ธฐ์ค์ (origin) ์ ์ด์ ์ ๋ง์ถฐ์ ๊ณต๋ถํ์ฃ ? ๊ทธ๋ ๊ทธ๋ด๊ฒ ๋ ์์ ๋ชจ๋ ํฌ๊ธฐ๋ ๋์ผํ๊ฒ ๋์๊ฑฐ๋ ์. ๊ทธ๋์ ํฌ๊ธฐ๋ frame
๊ณผ bounds
๊ฐ ๋์ผํ๋?ํ๋ฉด, ๊ทธ๊ฑด ๋ ์๋๋๋ค.
์ด ์ฐจ์ด๋ View๋ฅผ ํ์ ์ํฌ ๋ ํ์ธํ ์ ์์ต๋๋ค.
์์ ๊ฐ์ด View ํ๋๋ฅผ 45๋ ๋๋ ค๋ณด์์ต๋๋ค. ์ด ๋์ frame.size
์ bounds.size
๋ฅผ ์ถ๋ ฅํด๋ณด๋ฉด,
๋ถ๋ช
ํ๋์ View์ size
์ธ๋ฐ ๋ ๊ฐ์ด ๋ค๋ฅด๊ฒ ๋์ต๋๋ค.
frame
์ ๊ฒฝ์ฐ View๋ฅผ ๊ฐ์ธ๊ณ ์๋ ์ฌ๊ฐํ์ ์ขํ์ ํฌ๊ธฐ ๋ฅผ ๊ฐ์ผ๋ก ๊ฐ์ต๋๋ค. ์๋๋ฉด ์์ View์ ๋ํ ์๋์ ์ขํ์ด๊ธฐ ๋๋ฌธ์ ์ ํํ ์ฌ๊ฐํ์ ํํ์ด๊ธฐ ๋๋ฌธ์ด์ฃ . ๋ฐ๋ฉด bounds
๋ ํ์ ์ด ๋๋ค๋ฉด ๋ ์ํ ๊ทธ ๋ชจ์ต ๊ทธ๋๋ก์ ์ขํ์ ํฌ๊ธฐ ๋ฅผ ๊ฐ์ผ๋ก ๊ฐ์ต๋๋ค. ๋ณธ์ธ๋ง์ ๊ณ ์ ํ ์ขํ๊ณ์ ๋ํ ๊ฐ์ด๊ธฐ ๋๋ฌธ์
๋๋ค.
์ถ์ฒ: iOS Frame vs Bounds
์ฌ์ง์ผ๋ก ๋ณด๋ฉด ์ดํด๊ฐ ๋งค์ฐ ๋น ๋ฅผ ๊ฒ ๊ฐ์์ StackOverflow์์ ์ด๋ฏธ์ง๋ฅผ ํ๋ ๊ฐ์ ธ์์ต๋๋ค.