๐ค ๋ฌธ์ ๐ค
Bounds์ Frame์ ์ฐจ์ด๋ ๋ญ๊น? UIView์๋ bounds ํ๋กํผํฐ์ frame ํ๋กํผํฐ๊ฐ ์๋ค. ๊ณต์ ๋ฌธ์๋ฅผ ๋ด๋ ๋์ ์ฐจ์ด๋ ํฌ๊ฒ ์๋ฟ์ง ์๋๋ค. ๋ฐ๋ผ์ StoryBoad๋ฅผ ์ฌ์ฉํด ์ค์ตํ๋ฉฐ View์ Bounds์ Frame์ ๋น๊ต ๋ถ์ ํด๋ณด์!
1. ๊ณต์๋ฌธ์์ origin
๐๊ณต์๋ฌธ์ ํ์ธํ๊ธฐ
Bounds์ ๊ณต์๋ฌธ์
/UIKit /Views and controls /UIView /bounds
Instance Property
bounds
์์ฒด ์ขํ ์์คํ ์ผ๋ก ํด๋น view์ ์์น์ ํฌ๊ธฐ๋ฅผ ํํํ๋ ๊ฒฝ๊ณ ์ฌ๊ฐํ
๊ธฐ๋ณธ์ ์ธ bound ์์ ์ (0, 0)์ด๊ณ , size๋ frame ํ๋กํผํฐ์ ์๋ ์ฌ๊ฐํ์ size์ ๋์ผํ๋ค. ์ด ์ฌ๊ฐํ์ size ๋ณํ๋ center point๋ฅผ ๊ธฐ์ค์ผ๋ก view๋ฅผ ์ปค์ง๊ฒ ํ๊ฑฐ๋ ์ค์ด๋ค๊ฒ ํ๋ค. size ๋ณํ๋ ๋ frame ํ๋กํผํฐ์ ์ฌ๊ฐํ size๊ฐ ์ผ์น๋๋๋ก ๋ณ๊ฒฝํ๋ค. ๊ฒฝ๊ณ ์ฌ๊ฐํ์ ์ขํ๋ ํญ์ point๋ก ์ง์ ๋๋ค.
๊ฒฝ๊ณ ์ฌ๊ฐํ์ ๋ณํ๋ draw(_:) ๋ฉ์๋ ํธ์ถ ์์ด ์๋์ผ๋ก view๋ฅผ ๋ค์ ํ์ํ๋ค. ๋ง์ฝ ๋น์ ์ด UIKit๊ฐ draw(_:) ๋ฉ์๋๋ฅผ ํธ์ถํ๊ธธ ๋ฐ๋๋ค๋ฉด, contentMode ํ๋กํผํฐ๋ฅผ UIView.ContentMode.redraw ๋ก ์ค์ ํด๋ผ. ์ด ํ๋กํผํฐ์ ๋ณ๊ฒฝ์ฌํญ์ ์ ๋๋ฉ์ด์ ์ ์ ์ฉํ ์ ์๋ค.
Frame์ ๊ณต์๋ฌธ์
/UIKit /Views and controls /UIView /frame
Instance Property
frame
๋ถ๋ชจ ๋ทฐ์ ์ขํ ์์คํ ์ ๊ธฐ๋ฐํ view์ ์์น์ ํฌ๊ธฐ์ ํํํ๋ ํ ์ฌ๊ฐํ
์ด ์ฌ๊ฐํ์ ๋ถ๋ชจ ๋ทฐ์ ์ขํ ์์คํ ์ ๊ธฐ์ค์ผ๋ก ๋ทฐ์ ํฌ๊ธฐ์ ์์น๋ฅผ ์ ์ํ๋ค. ๋ ์ด์์ ์์ ๋์ ์ด ์ฌ๊ฐํ์ผ๋ก ํฌ๊ธฐ๋ฅผ ์ค์ ํ๊ณ ๋ทฐ๋ฅผ ๋ฐฐ์นํ ์ ์๋ค. frame ํ๋กํผํฐ ์ค์ ์ center ํ๋กํผํฐ์ ์ํด ์ง์ ๋ point๋ฅผ ๋ณ๊ฒฝํ๊ณ , bounds ์ฌ๊ฐํ์ size๋ฅผ ๋ณ๊ฒฝ์ํจ๋ค. frame ์ฌ๊ฐํ์ ์ขํ๋ ํญ์ point ๋จ์๋ก ์ค์ ๋๋ค.
(Warning) ๋ง์ฝ transform ํ๋กํผํฐ๊ฐ ์๋ณ transform์ด ์๋๋ผ๋ฉด, ์ด ํ๋กํผํฐ์ ๊ฐ์ ์ ์๋์ง ์์ผ๋ฏ๋ก ๋ฌด์ํด์ผํ๋ค.
frame ์ฌ๊ฐํ์ ๋ณํ๋ draw(_:) ๋ฉ์๋ ํธ์ถ์์ด ์๋์ผ๋ก ๋ทฐ๋ฅผ ๋ค์ ํ์ํ๋ค. ๋ง์ฝ frame ์ฌ๊ฐํ์ด ๋ณ๊ฒฝ๋ ๋ UIKit๊ฐ draw(_:) ๋ฉ์๋๋ฅผ ํธ์ถํ๊ธธ ๋ฐ๋๋ค๋ฉด, contentMode ํ๋กํผํฐ๋ฅผ UIView.ContentMode.redraw ๋ก ์ค์ ํ๋ผ.
์ด ํ๋กํผํฐ ๋ณ๊ฒฝ์ ์ ๋๋ฉ์ด์ ์ ์ ์ฉํ ์ ์๋ค. ํ์ง๋ง ๋ง์ฝ transform ํ๋กํผํฐ๊ฐ ๋น์๋ณ transform์ ํฌํจํ๋ค๋ฉด, frame ํ๋กํผํฐ์ ๊ฐ์ ์ ์๋์ด์ง ์ ์์ผ๋ฉฐ ์์ ํด์๋ ์ ๋๋ค. ์ด๋ฐ ๊ฒฝ์ฐ์, center ํ๋กํผํฐ๋ฅผ ์ฌ์ฉํ์ฌ ๋ทฐ๋ฅผ ์ฌ๋ฐฐ์นํ๊ณ ๋์ bounds ํ๋กํผํฐ๋ฅผ ์ฌ์ฉํ์ฌ size๋ฅผ ์กฐ์ ํ๋ผ.
๊ณต์ ๋ฌธ์์ ๋์จ ๋ด์ฉ๋ค๋ก ๋น๊ต ํ๋ฅผ ๋ง๋ค์ด๋ณด์. ์๋ ๊ตฌ๋ถ์ ์ค์ต์ ํ๋ค๋ณด๋ฉด ๋ค ์ฐ๊ด๋์ด ์๋ค. ๋ฐ๋ผ์ ์ฃผ์๊น๊ฒ ๋ณด๋ฉด ์ข๋ค.
bounds | frame | |
ํํ | ๊ฒฝ๊ณ, ๋ฒ์ | ํ |
์ขํ | ์์ฒด ์ขํ ์์คํ - (0, 0) ๊ธฐ์ค | ๋ถ๋ชจ ๋ทฐ์ ์ขํ ์์คํ |
๋จ์ | point | point |
์ ๋๋ฉ์ด์ | o | o |
์๋ ๋ทฐ ํ์ | o | o |
๊ด๋ จ๋ ํ๋กํผํฐ | frame | frame, center, transform |
๐ฆพ์ค์ตํ๊ธฐ
Frame ์ค์ต
1. ๋ณด๋ผ๋ทฐ frame์ ๊ธฐ๋ณธ origin ํ์ธํ๊ธฐ
๋ณด๋ผ๋ทฐ๋ฅผ ์คํ ๋ฆฌ๋ณด๋๋ก ๋ฐฐ์นํ ํ print(purpleView.frame) ๋ฅผ ํด๋ณด๋ฉด ๊ทธ๋ฆผ ์ ์ขํ๊ฐ์ด ๋์จ๋ค
2. ๋ณด๋ผ๋ทฐ์ frame.origin์ (0, 0)์ผ๋ก ๋ณ๊ฒฝํ๊ธฐ
frame์ ๋ถ๋ชจ ๋ทฐ ๊ธฐ๋ฐ์ ์ขํ ์์คํ ์ ๊ฐ๊ณ ์๊ธฐ ๋๋ฌธ์ ๋ณด๋ผ๋ทฐ๋ ๊ฐ์ฅ ์์ View์ ์ขํ์ ๊ธฐ๋ฐํ์ฌ (0, 0)์ผ๋ก ์ด๋ํ๋ค. ๋ณด๋ผ๋ทฐ์ ์์๋ทฐ๋ค ๋ํ ๋ถ๋ชจ๋ทฐ์ ๊ธฐ๋ฐํ frame์ ๊ฐ๊ณ ์์ผ๋ฏ๋ก ๋ณด๋ผ๋ทฐ๋ฅผ ๋ฐ๋ผ ์ด๋ํ๋ค. ์ฆ ๋ณด๋ผ๋ทฐ์ frame.origin์ ๋ณ๊ฒฝํ๋ฉด ์์๋ทฐ๋ ๋ฐ๋ผ๊ฐ๋ค.
3. ๋ ธ๋๋ทฐ์ frame.origin์ (0, 120)์ผ๋ก ๋ณ๊ฒฝํ๊ธฐ
๋ ธ๋๋ทฐ๋ ๋ถ๋ชจ์ธ ๋ณด๋ผ๋ทฐ์ ์ขํ์์คํ ์ ๊ธฐ๋ฐํด (0, 120)์ผ๋ก ์ด๋ํ๋ค. ๊ทธ๋ฆฌ๊ณ ๊ทธ ์์๋ทฐ๊ฐ ๋ฐ๋ผ๊ฐ๋ค.
4. ๋ฏผํธ๋ทฐ์ frame.origin์ (0, 0)์ผ๋ก ๋ณ๊ฒฝํ๊ธฐ
๋ฏผํธ๋ทฐ๋ ๋ถ๋ชจ์ธ ๋ ธ๋๋ทฐ์ ์ขํ ์์คํ ์ ๊ธฐ๋ฐํด (0, 0)์ผ๋ก ์ด๋ํ๋ค.
bounds ์ค์ต
frame์ ๊ณต์๋ฌธ์๋ง์ผ๋ก๋ ์ดํด๊ฐ ๊ฐ๋ฅํด ์ค์ต๋ ๋ฌด๋ฆฌ์์ด ์งํํ๋ค. ํ์ง๋ง bounds๋ ๊ณต์๋ฌธ์๋ง์ผ๋ก ์ดํดํ๊ธฐ์ ์กฐ๊ธ ์ด๋ ค์์ด ์์ด ์ค์ต์ด ๊ผญ ํ์ํ๋ค.
1. ๋ณด๋ผ๋ทฐ์ bounds์ ๊ธฐ๋ณธ origin ํ์ธํ๊ธฐ
๋ณด๋ผ๋ทฐ๋ฅผ ์คํ ๋ฆฌ๋ณด๋๋ก ๋ฐฐ์นํ ํ print(purpleView.bounds) ๋ฅผ ํด๋ณด๋ฉด (0, 0) ์ขํ๊ฐ์ด ๋์จ๋ค. ๋ณด์ด๋ ๊ฒ๊ณผ ๋ค๋ฅธ ๊ฐ์ ์ฒ์์๋ ๋นํฉํ์ง๋ง ๊ณต์๋ฌธ์๋ฅผ ๋ณด๋ฉด ์ดํด๊ฐ๋ฅํ๋ค. ๊ณต์ ๋ฌธ์์๋ bounds์ ๊ธฐ๋ณธ์ ์ธ ์์ ์ด (0, 0)์ด๋ผ๊ณ ํ๋ค. ์ฆ, ํ์ฌ ์คํ ๋ฆฌ๋ณด๋๋ก ๋ฐฐ์น๋ ์์น๊ฐ ์์ฒด ์ขํ๊ณ๋ฅผ ๊ฐ์ง๋ bounds์ (0, 0)์ธ ๊ฒ์ด๋ค.
2. ๋ณด๋ผ๋ทฐ bounds.origin์ (100, 0)์ผ๋ก ๋ณ๊ฒฝํ๊ธฐ
๋ณด๋ผ๋ทฐ์ bounds.origin์ ๋ณ๊ฒฝํ๋๋ฐ ์์๋ทฐ๊ฐ ์์ง์ธ๋ค. ์คํ๋ ค ๋ณด๋ผ๋ทฐ๋ ๊ทธ ์๋ฆฌ์ ๊ฐ๋งํ ์๋๋ค.
3. ๋ ธ๋๋ทฐ bounds.origin์ (100, 0)์ผ๋ก ๋ณ๊ฒฝํ๊ธฐ
๋ณ๊ฒฝ๋ ๋ณด๋ผ๋ทฐ๋ฅผ ๋๊ณ ์ด์ ๋ ธ๋๋ทฐ๋ฅผ ๋ณ๊ฒฝํด๋ณด์. ๊ทธ๋ผ ์์๋ทฐ๊ฐ ์์ง์ฌ ์๊ณ , ์คํ๋ ค ๋ ธ๋๋ทฐ๋ ๊ทธ ์๋ฆฌ์ ๊ทธ๋๋ก์ด๋ค.
4. ์ต์์ View์ bounds.origin์ (100, 0)์ผ๋ก ๋ณ๊ฒฝํ๊ธฐ
๊ทธ๋ผ ์ต์์ View๋ฅผ ๋ณ๊ฒฝํ๋ฉด ์ด๋ป๊ฒ ๋ ๊น? ๋ณ๊ฒฝ๋ ๋ณด๋ผ๋ทฐ, ๋ ธ๋๋ทฐ๋ฅผ ๋๊ณ ์ต์์ View๋ฅผ ๋ณ๊ฒฝํด๋ณด๋ฉด, ์์๋ทฐ๋ค์ด ์ด๋ํ๋ค. View๋ ๊ทธ ์๋ฆฌ ๊ทธ๋๋์ด๋ค.
๐๏ธ์ ๋ฆฌํ๊ธฐ
์ด๋ป๊ฒ ํด๋น ๋ทฐ๊ฐ ์๋ ์์๋ทฐ๋ค์ด ์์ง์ผ๊น? ์ด๋ ํด๋ํฐ ํ๋ฉด์ ์๊ฐํด๋ณด๋ฉด ์ฝ๋ค.
์ฐ๋ฆฌ๊ฐ ํฐ ์ฌ์ง์ ํด๋ํฐ์ผ๋ก ํ๋ํ์ ๋ ํ๋ฉด์ ๋ด๊ธฐ๋ ๋ถ๋ถ๋ง ์ฐ๋ฆฌ๋ ๋ณผ ์ ์๋ค. ์ข์ฐ๋ก ํ๋ฉด์ ์ด๋ํ๋ฉด ํ๋ฉด์ ๋ด๊ธฐ์ง ์๋ ๋ถ๋ถ์ ์๋ฆฌ๊ฒ ๋๋ค. bounds๋ ๋๊ฐ๋ค. ๋ณด๋ผ๋ทฐ๋ฅผ ํด๋ํฐ ํ๋ฉด์ด๋ผ ์๊ฐํด๋ณด์. ๋ณด๋ผ๋ทฐ์ ์๊ฐ๋ฝ์ ๋ ์ค๋ฅธ์ชฝ 100์ ๋ ์ด๋์ํจ๋ค ์๊ฐํด๋ณด์.๊ทธ๋ผ ๋ ธ๋๋ทฐ๋ ์๋ ์์์ฒ๋ผ ์ผ์ชฝ์ผ๋ก ์ด๋๋์ด ์ผ๋ถ๋ถ๋ง ๋ณด์ผ ๊ฒ์ด๋ค.
Bounds๋ ๊ณง ์ฐ๋ฆฌ๊ฐ ๋ณด๋ ํ๋ฉด์ธ ๊ฒ์ด๋ค. ์ฆ View, ๋ณด๋ผ๋ทฐ, ๋ ธ๋๋ทฐ์ bounds๊ฐ ๋ทฐ ๊ฐ๊ฐ์ ํ๋ฉด์ธ ๊ฒ์ด๋ค.
ScrollView
์์ ์์๋ ๋ญ๊ฐ ์ด๋์ ๋ง์ด ๋ณธ ๊ฒ ๊ฐ๋ค. ๋ฐ๋ก ์ฐ๋ฆฌ๊ฐ ํ๋ฉด์ ์คํฌ๋กคํ๋ ์์ ๊ณผ ๋์ผํ๋ค. ScrollView์๋ ์ ์ฒด ๋ด์ฉ์ ํด๋นํ๋ Content์์ญ์ด ์๊ณ ์ฐ๋ฆฌ๊ฐ ๋ณด๋ ํ๋ฉด์ธ frame ์์ญ์ด ์๋ค. ์ฐ๋ฆฌ๋ ์ํ์ข์ฐ ์คํฌ๋กค์ ํ๋ฉฐ Content์์ญ์ ๋์๋ค๋๋ค. ์ด๋ ์ฐ๋ฆฌ๊ฐ ์ด๋๋ฅผ ๋ณด๋์ง ์ ์ ์๋ ์ขํ๊ฐ ์๋๋ฐ ๊ทธ๊ฒ ๋ฐ๋ก contentOffset ํ๋กํผํฐ์ด๋ค. contentOffset๊ณผ bounds๋ ๋์ผํ ์ญํ ์ ์ํํ๋ ๊ฒ์ด๋ค. ScrollView์ ๋ํ ์ค๋ช ์ ์ด์ ๊ธ์ ํตํด ํ์ธํ ์ ์๋ค.
๊ฐ๊ฐ์ origin์ ์ด๋์ ์ ์ฉ๋ ๊น?
Frame์ ๋ถ๋ชจ ๋ทฐ๋ฅผ ๊ธฐ์ค์ผ๋ก ์ค์ ๋ฐฐ์น๋๊ธฐ ๋๋ฌธ์ Layout์ ๊ตฌ์ฑํ ๋ ์ฌ์ฉํ ์ ์์ ๊ฒ ๊ฐ๋ค.
Bounds๋ ๊ตฟ๋ ธํธ๊ฐ์ ๊ฑธ ๋ง๋ค ๋ ์ฌ์ฉํ ์ ์์ ๊ฒ ๊ฐ๋ค. ์๋ํ๋ฉด ๊ตฟ๋ ธํธ์ ๊ฒฝ์ฐ ํ๋์ ์ด๋์ด ์์ ๋ก์ด๋ฐ, ์ด๋ฌํ ์์ ์ ์์ฒด ์ขํ๊ณ๋ฅผ ๊ฐ๊ณ ์์ด ํ๋ฉด ์ญํ ์ ํ๋ bounds๊ฐ ์ ํฉํ ๊ฒ ๊ฐ๋ค. ํ์ง๋ง ์์ง ์ค์ตํด๋ณด์ง ์์ ์ ํํ์ง ์๋ค.
2ํธ
frame
bounds
โญ๏ธFrame vs Bounds ์ ๋๋ก ์ดํดํ๊ธฐ
'iOS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ iOS ] Link Presentation ์์๋ณด๊ธฐ (0) | 2023.08.18 |
---|---|
[ iOS ] Bounds์ Frame ๋น๊ต - 2. Size (0) | 2023.07.01 |
[ iOS ] ๋๊ธฐ์ ๋น๋๊ธฐ / ์ง๋ ฌ๊ณผ ๋์์ฑ (0) | 2023.06.22 |
[ iOS ] CollectionView์ Section ์จ๊ธฐ๊ธฐ - CompositionalLayout (0) | 2023.03.06 |
[ iOS ] ScrollView ํ๋ฉด ์บก์ณํ๊ธฐ (Image Creation) (0) | 2023.02.18 |