[iOS] Frame과 Bounds의 차이

cskim·2019년 10월 7일
1

framebounds는 view의 위치와 크기를 표현하는 property 입니다. 둘 다 위치와 크기를 표현하는 것인데 어떤 차이가 있어서 둘로 구분해 놓은 걸까요?

원점(origin) 표현

두 property는 어떤 좌표계를 기준으로 하는가에 따라 좌표 표현이 달라집니다. framesuperView의 좌표계를 기준으로 하는 현재 view의 원점을 나타내지만, bounds현재 view의 좌표계를 기준으로 원점을 나타냅니다.

위 그림에서 View Bframe 좌표는 super view인 View A의 좌표를 기준으로 (10, 20)만큼 떨어진 위치에 있다는 것을 나타내고 있습니다. View C도 마찬가지로 super view인 View B의 좌표계에서 (10, 20)만큼 떨어진 위치에 있다는 것을 알 수 있습니다. View BView Corigin은 서로 같지만 super view가 다르기 때문에 실제 화면에서는 다른 위치에 표시됩니다.

frame과 다르게 bounds의 원점 좌표는 모두 (0, 0)인데, 각각의 view의 좌표계를 기준으로 원점을 표현하기 때문입니다.

좌표 이동

Frame의 좌표 이동

frame은 super view의 좌표계 안에서 표현되기 때문에 원점 좌표를 변경하면 super view 안에서 해당 변화량만큼 view가 이동하는 것처럼 보이게 됩니다. View Bframe 원점을 이동시키면 View B가 super view인 View A 안에서 해당 좌표로 이동합니다. 이 때, View Cframe 좌표가 View B를 기준으로 하기 때문에 View B가 이동한 만큼 View C도 이동합니다.

Bounds의 좌표 이동

boundsframe과 달리 자기 자신의 좌표계 안에서 원점을 표현하기 때문에, bounds의 원점을 이동시키면 실제로 해당 view가 이동하는게 아니라 subview들이 원점을 이동시킨 만큼 반대 방향으로 이동합니다. 즉, view가 해당 위치로 이동했을 때의 subview들의 모습을 현재 화면에서 다시 그려주는 것 처럼 보입니다. View Bbounds 원점을 이동시키면 실제로 View B는 이동하지 않습니다. 대신, View B가 해당 위치로 이동했을 때 subview인 View C의 모습을 현재 View B의 위치에서 다시 그려주기 때문에 마치 View C가 이동하려고 했던 위치의 반대 방향으로 같은 크기만큼 이동한 것 처럼 보이게 됩니다.

View B의 bounds 좌표를 이동시켰을 때 View C의 위치실제 화면에 보여지는 모습

크기(size) 표현

frame에서 size는 view 자체의 크기가 아닌 view를 감싸는 사각형 영역의 크기를 나타냅니다. View를 회전시키면 frame의 높이, 너비가 변화합니다. 이와 달리, boundssize는 view 자체의 크기를 나타냅니다. View를 생성한 후 frame을 변경하거나 view를 회전시킨다 하더라도 처음에 초기화한 view의 size를 게속 유지합니다.

초기화한 View의 frame과 boundsView를 회전시켰을 때 frame과 bounds

요약

  • frame.origin은 superview의 좌표계를 기준으로 current view의 위치를 나타낸다
  • frame.size은 current view를 감싸는 사각형 영역의 크기를 나타낸다
  • bounds.origin는 current view 자체의 좌표계를 기준으로 위치를 나타낸다
  • bounds.size는 current view가 초기화될 때 크기를 나타낸다

참고

profile
iOS Developer

0개의 댓글