iOS/AutoLayout

Frame vs Bounds

HJ39 2023. 1. 7. 16:37

Frame 

Super View 좌표계에서 View의 위치와 크기를 나타냄

 

FirstView의 SuperView는 루트 View가 된다.

SecondView의 SuperView는 FirstView이다.

(클래스 상속할 때 슈퍼클래스와 같은 Super 같다)

 

frame origin(x, y)

frame의 origin(x, y) 좌표는 SuperView의 원점을 (0,0)으로 놓고 원점으로부터 얼마나 떨어져 있는지 나타낸다.

SuperView의 원점은 왼쪽 맨 위에 해당한다.

그래서 frame의 origin좌표는 SuperView에서 x, y 만큼 떨어져 있다고 표현할 수 있다.

 

□ frame origin 좌표 변경한 경우

소들이님 예시 사진

secondView의 frame origin 좌표를 변경하는 경우 thirdView도 같이 움직이는 이유는 frame의 좌표는 SuperView(thirdView의 Superview는 SecondView!)의 좌표를 기준이다.

따라서 thirdView는 SecondView 좌표계 기준이므로 움직이는 것이 당연하다.

 

 

frame size(width, height)

'View의 영역을 모두 감싸는 사각형으로 나타낸 것'

소들이님 블로그 예제 사진

사진을 보면 쉽게 이해할 수 있을 것이다.

View를 회전시켜도 View를 감싸는 사각형에 대한 width, height를 표시한다.

 

 

 


Bounds

자신의 좌표계이다. 자기 자신을 기준으로 설정된다.

 

Bounds origin(x, y)

SuperView와 아무 관계없이 자신의 원점을 (0,0)으로 고정시킨다.

 

□ bounds의 origin을 변경하는 경우

소들이님 예제 사진

Bounds가 변경된 것을 이해하려면 약간 복잡하다..

 

SecondView의 좌표를 (0,0)에서 SecondView의 시각(Viewport)을 보면

소들이님 예제 사진

위와 같이 구성된다.

 

이때 (50,50)으로 옮기면

소들이님 예제 사진

다음 사진처럼 viewport(화면에 보이는 부분)가 옮겨지게 된다.

우리가 보기에는 thirdView가 옮겨진 것처럼 보이지만 사실 SeondView의 viewport가 옮겨진 것!

 

Bounds size(width, height)

bounds는 방금 View를 회전시켰을 때 frame의 size는 View를 덮는 사각형의 width, height로 달라지지만 bounds의 size는 우리가 지정한 View의 width, height를 가지고 있는다.

즉) frame 예제에서 View의 width = 200, height = 130으로 지정한 후 View를 회전시켰을 때 

frame의 size(width: 238, height:213)으로 변경되지만, bounds의 size(width:200, height:130)으로 고정되어 있다.

 

 

Bounds는 ScrollView에서 스크롤할 때 사용된다고 한다!

 

 

# 참고한 블로그

  1. https://babbab2.tistory.com/44
  2. https://babbab2.tistory.com/45
  3. https://babbab2.tistory.com/46

'iOS > AutoLayout' 카테고리의 다른 글

Autolayout 제약걸기 (코드 - 1)  (0) 2023.01.07
Intrinsic Content Size, Priority  (0) 2023.01.07