티스토리 뷰
반응형
iOS에서 Frame과 Bounds의 차이
iOS에서 frame
과 bounds
는 UIView
클래스의 두 가지 중요한 속성으로, 각각의 차이점과 사용 방법을 이해하는 것이 중요합니다. 이 두 속성은 뷰의 위치와 크기를 정의하는 데 사용되지만, 서로 다른 관점을 제공합니다.
1. Frame
frame
은 슈퍼뷰(superview)를 기준으로 한 뷰의 위치와 크기를 나타냅니다. 즉, 뷰가 부모 뷰 내에서 어디에 위치하는지, 그리고 얼마나 큰지에 대한 정보를 제공합니다.
구성 요소:
origin
: 뷰의 위치를 나타내며, 부모 뷰의 좌표계에서 측정됩니다.size
: 뷰의 크기를 나타냅니다.
예시:
let viewFrame = myView.frame
print("View's frame origin: \(viewFrame.origin)") // 부모 뷰 기준의 위치
print("View's frame size: \(viewFrame.size)") // 뷰의 크기
특징:
- 뷰가 슈퍼뷰에 대해 어떻게 배치되는지를 알려줍니다.
- 회전이나 스케일 변환(transform)이 적용되면
frame
의 값은 바뀔 수 있습니다.
예시 이미지:
+------------------------+ <- 슈퍼뷰
| |
| +-----------+ | <- 서브뷰 (frame으로 정의된 위치와 크기)
| | Subview | |
| +-----------+ |
| |
+------------------------+
2. Bounds
bounds
는 자기 자신을 기준으로 한 뷰의 크기와 내부 좌표계를 나타냅니다. 즉, 뷰가 자체적으로 어떤 크기와 좌표계를 가지고 있는지를 알려줍니다. bounds
는 뷰의 내부 요소들이 어떻게 배치되는지에 영향을 미칩니다.
구성 요소:
origin
: 뷰의 내부 좌표계의 원점을 나타냅니다. 기본값은(0, 0)
입니다.size
: 뷰의 크기를 나타냅니다.
예시:
let viewBounds = myView.bounds
print("View's bounds origin: \(viewBounds.origin)") // (0, 0) 또는 뷰 내부 좌표계의 원점
print("View's bounds size: \(viewBounds.size)") // 뷰의 크기
특징:
- 뷰의 내부 좌표계와 관련이 있습니다.
- 뷰 자체의 크기에는 변함이 없지만,
origin
을 변경하면 뷰 내의 서브뷰들이 움직이는 것처럼 보일 수 있습니다. - 회전이나 스케일 변환이 일어나도
bounds
는 변경되지 않으며, 뷰 자체의 크기만을 의미합니다.
예시 이미지:
+------------------------+ <- 자신의 좌표계
| +-----------+ |
| | | |
| | Content | | <- bounds로 정의된 내부 크기와 원점
| | | |
| +-----------+ |
+------------------------+
3. Frame과 Bounds의 차이점
- frame은 슈퍼뷰를 기준으로 한 뷰의 위치와 크기를 나타냅니다.
- bounds는 자기 자신을 기준으로 한 뷰의 크기와 내부 좌표계를 나타냅니다.
- frame은 슈퍼뷰와의 관계를 나타내는 반면, bounds는 뷰의 내부 레이아웃에만 영향을 미칩니다.
4. Frame과 Bounds의 사용 예시
Frame 사용:
// 슈퍼뷰에서 서브뷰의 위치와 크기 설정
myView.frame = CGRect(x: 50, y: 100, width: 200, height: 150)
여기서 x
, y
는 슈퍼뷰 기준에서 뷰의 위치를 나타냅니다.
Bounds 사용:
// 뷰 내부에서 좌표계의 원점을 변경
myView.bounds.origin = CGPoint(x: 10, y: 10)
여기서는 뷰의 좌표계 원점이 이동하여 내부 콘텐츠가 이동하는 것처럼 보입니다.
5. 요약
- frame은 뷰가 슈퍼뷰에서 어떻게 배치되는지 나타냅니다.
- bounds는 뷰의 내부 좌표계와 크기를 나타냅니다.
- 두 속성은 종종 함께 사용되지만, 서로 다른 관점을 제공하므로 각각의 목적에 맞게 사용해야 합니다.
반응형
'프로그래밍 > iOS' 카테고리의 다른 글
iOS에서 Floating 버튼 만들기 (0) | 2024.09.23 |
---|---|
iOS Auto Layout을 코드로 작성하기 (0) | 2024.09.23 |
ios에서 UIScene, UIWindow, UIWindowScene의 차이 (0) | 2024.09.12 |
Swift if - guard 문법, 장단점 (0) | 2023.04.16 |
swift 딕셔너리 사용법에 대해 알아보자. (0) | 2023.04.16 |
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- golang
- 부동산
- 스핀락
- JavaScript
- frida
- Frontend
- 커널드라이버
- 주식
- 트렌드
- JSX
- 예제
- SWiFT
- 유튜브
- 생각
- ChatGPT
- Windows
- HTML
- Spring
- react
- go
- ios
- WinAPI
- 파이썬
- Python
- Backend
- 투자
- Linux
- CSS
- Java
- reactjs
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |
글 보관함