iOS/Swift

UIView의 bound와 Frame

Downey 2021. 8. 25. 17:09

주의! 해당 게시물에 표기된 좌표는 예시를 위한 것으로, 정확한 값이 아님!

 

선 요약

  Frame Bound
origin (x, y) : 기준점 superView의 원점에서 본
해당 View의 원점 좌표
해당 View의 원점 (0, 0)
size (width, height) : 기준 해당 View를 감싸는 사각형의
width, height
해당 View의 자체 width, height

 

Frame과 Bounds의 Origin

 

Frame : superView에서 본 View의 기준 점 좌표

Bounds : 해당 View의 기준 점 좌표

FirstView는 RootView의 Origin에서 (50, 100) 만큼 떨어져 있다. -> FirstView.frame.origin == (50, 100)

FirstView의 Bounds.origin은 자기 자신의 origin이고, 변경을 가하지 않았다. -> FirstView.bounds.origin == (0, 0)

SecondViewFirstView의 Origin에서 (50, 100) 만큼 떨어져 있다. -> SecondView.frame.origin == (50, 100)

SecondView의 Bounds.origin은 자기 자신의 origin이고, 변경을 가하지 않았다. -> SecondView.bounds.origin == (0, 0)

 

회전한 View의 Frame과 Bounds의 origin

회전한 SecondViewFirstView에서 볼 때, origin의 위치가 이동했다.

 

회전한 View의 Frame과 Bounds의 width, height

회전한 SecondViewFramex,y좌표상 최고점과 최저점을 잡은 사각형이다.

회전한 SecondViewBoundsSecondView가 기준이기 때문에 bounds는 회전하기 전과 같다.

 

View의 Frame과 Bounds의 origin 변경

Frame의 origin이 변경될 경우, superView에서 보는 좌표가 이동하므로, 내부의 요소와 같이 이동한다.

Bounds의 origin이 변경될 경우, 자기 자신의 기준점이 이동하는 것이므로, 내부의 요소가 (-x,-y) 만큼 이동한다.

 

Frame.origin 변경의 경우

FirstView.frame.origin을 변경한 경우,

RootView에서 보는 FirstView의 origin 좌표가 변경되었으므로, FirstView의 하위 요소와 함께 이동한다.

 

Bounds.origin 변경의 경우

FirstView.bounds.origin을 변경한 경우, 

FirstView의 origin 좌표가 (0,0)에서 (50,100)으로 변경되었다. 이로 인하여, SecondView.frame.origin이 (0,0)처럼 보이게 된다.

 

아래 그림을 보고, 부연설명을 진행한다.

좌측은 FirstView.bounds.origin을 변경하기 전, 우측은 변경 후 이다.

 

SecondViews는 FirstView의 원점 (0,0)으로부터 (x: 50, y: 100) 만큼 떨어져있다. (SecondView.frame.origin == (50,100) )

bounds는 해당 뷰의 보여주는 영역(ViewPort)을 뜻한다. 이를 (0,0)에서 (50,100)으로 이동하였다. (FirstView.bounds.origin == (50,100) )

FirstView의 보여주는 영역이 변경되었으므로, SecondView.frame.origin은 변화 없지만, 내부의 SubView들이 이동한 것 처럼 보이는 것.