extension UIView {
open var frame: CGRect
open var bounds: CGRect
...
}
frame과 bounds는 이전 시간에 학습했던 CGRect 타입,
즉 좌표와 크기를 모두 갖고잇는 정보이다.
타입이 같다는건 공통점이 있다는 것이고, 저장하는 변수의 이름이 다르다는 것은
차이점이 있다는 느낌이 온다.
이번 시간에는 가장 대표적인 공통점과 차이점을 한번 알아보자.
frame
정의
The Frame rectangle, which describes the view's location and size in its superview's coordinate system
프레임은 super view 좌표계 기준으로 현재 View의 위치와 크기를 나타내는 것
여기서 super view는 현재 view를 품고 있는 바로 다음 상위 계층의 view이다.
아래 그림을 보면 이해가 된다.
frame의 origin
정의에서 알 수 있듯 frame의 origin은 super view의 원점으로 부터 얼마나 떨어져 있는 지를 나타내는 값이다.
이 상황에서 현재 뷰의 frame.origin은 x = 10 , y = 10 이므로 (10, 10)가 된다.
frame의 size
View의 영역을 모두 감싸는 사각형을 나타내는 크기이다.
아직 뭔가 확 와닿지 않는다.
한번 그림으로 살펴보자.
같은 View인데 출력되는 size가 다른 것을 볼 수 있다.
정의를 다시 살펴보자.
View의 영역을 모두 감싸는 사각형을 나타내는 크기이다.
여기서 회전을 시키지 않았을 때는 View의 영역을 감싸는 사각형과 View의 크기가 일치하여
예상한 값을 확인할 수 있다.
하지만 회전을 시키면 별도의 View를 감싸는 영역을 확인할 수 있다.
이때는 View의 크기와 불일치하는 것을 확인할 수 있다.
정리하면 뷰를 감싸는 영역이란 View의 크기와 일치할 수 도 있고
일치하지 않을 수 도 있는 특징이 있다.
bounds
정의
The bounds rectangle, which describes the view's location and size in its own coordinate system
프레임은 super view 좌표계 기준의 좌표계라면 bounds는 오직 자신의 좌표계에 집중하는 특성이다.
bounds의 origin
bounds는 오직 자신의 좌표계를 기준으로 하기 때문에 bounds의 orgin은 처음에는 무조건 (0, 0)으로 초기화 된다.
그러면 bounds의 origin은 변경되지 않나??
그렇지는 않다 대표적으로 ScrollView를 사용할 때 변경된다고 한다.
그 내용은 설명이 길어져 다음 포스팅에서 다뤄보자.
bounds의 size
bounds의 size는 View 자체의 영역이다.
그림과 같이 값이 변하지 않는다. frame과는 타입은 같지만 다른 특징이 많이 보인다.
정리하면 bounds의 origin과 size는 일반적인 상황에서 불변의 특징이 있다.
정리
frame | bounds | |
origin (x, y)의 기준점 | super view의 좌표계 | 자신의 좌표계 |
size (width, heigh) | View의 영역을 모두 감싸는 사각형 | View 영역 자체 |
참고
'iOS > UIKit' 카테고리의 다른 글
frame vs bounds (4) [ 사용 용도 ] (1) | 2024.09.02 |
---|---|
frame vs bounds (3) [origin, viewport ] (3) | 2024.09.02 |
frame vs bounds (1) [ CGPoint, CGSize, CGRect ] (0) | 2024.09.02 |
생명주기 (4) [ 업데이트 Cycle ] (2) | 2024.09.01 |
생명주기 (3) [ View 생명주기 ] (0) | 2024.09.01 |