- frame과 bounds는 UIView의 instance property입니다.
- UIView의 선언부를 보면, 둘 다 동일하게 CGRect 타입으로 선언되어있습니다.
- CGRect는 사각형의 위치(CGPoint)와 크기(CGSize)를 포함하는 구조체입니다.
- 자세한 설명은 아래 링크를 통해 쉽게 이해할 수 있습니다. https://zeddios.tistory.com/201
정의
frame
- SuperView(상위 뷰)의 좌표 시스템 안에서 View의 위치와 크기를 나타냅니다.
bounds
- View의 위치와 크기를 자신만의 좌표 시스템 안에서 나타냅니다.
- 다음과 같이 3개의 View가 있습니다.
- 각각 SuperView, SubView, View로 칭하겠습니다.
frame
- frame은 View의 상위 뷰에 대한 좌표값을 통해 위치를 나타냅니다.
- 기본 형태에서 SubView의 좌표를 (0,0)으로 변경해보겠습니다.
- 그럼 SubView는 SuperView의 좌측 상단 기준에서 (0,0)만큼 위치하게 됩니다.
- View는 SubView를 기준으로 위치를 나타내기 때문에 SubView의 좌표값과는 무관하게 위치의 변화가 없습니다.
- 그럼 이번에는 SubView의 좌표값을 (10,10), View의 좌표값을 (0,0)으로 변경해보겠습니다.
- 자신의 부모 뷰를 따라, 즉 SubView는 SuperView를 기준으로 View는 SubView를 기준으로 사각형을 위치시킵니다.
bounds
- bounds는 자신만의 좌표를 통해 위치를 나타냅니다.
- 위와 동일하게 기본 형태에서 SubView의 좌표를 (0,0)으로 변경해보겠습니다.
- 기본 형태에서 아무런 변화가 일어나지 않습니다. 이는 bounds의 기본 좌표값(default)이 (0,0)이기 때문입니다.
- SubView의 좌표를(30,30)으로 변경해보겠습니다.
- 그럼 SubView가 오른쪽 하단으로 가야 할 거 같은데, 갑자기 View의 위치가 왼쪽 상단으로 이동하게 됩니다.
- 이는 bounds가 상위 뷰와 무관하게 해당 위치에서 view를 다시 그리라는 의미로 적용되기 때문입니다.
- 따라서 SubView가 움직이지 않는 것으로 보이고, View가 움직이는 것으로 보이는 것입니다.
- 실제로 View는 가만히 있고, SubView가 화살표의 방향대로 움직이는 것이라고 이해하시면 됩니다.
내용 출처
https://zeddios.tistory.com/203
'iOS > iOS' 카테고리의 다른 글
Delegate,Block,Notification,KVO (0) | 2022.02.28 |
---|---|
Delegate 패턴이란? (0) | 2022.02.26 |
Class와 Struct의 차이 (0) | 2022.02.25 |
as, as?, as!의 차이 (0) | 2022.02.24 |
Escaping Closure (0) | 2022.02.23 |
댓글