Introduce

Origin

Frame

  • frameorigin상위 뷰(super view)의 좌표를 기준으로 위치를 이동시킨다.
  • 하위 view들의 위치도 현재 view의 좌표를 기준으로 위치해 있으므로, 현재 화면에서 view와 그 하위 view의 위치가 모두 이동한다.

Bounds

  • boundsorigin하위 뷰(sub view)와 관련되어 있다. bounds는 자기 자신 view 안에서 좌표를 나타낸다.
  • View의 bounds 좌표(origin)를 (x, y)만큼 이동시키면 위치는 이동하지 않고 boundsorigin 좌표만 변경된다.
  • 실제로는 view의 bounds 좌표가 이동한 것이지만, 화면에서 볼 때는 sub view가 이동한 좌표 (x, y)만큼 반대 방향으로 이동한 것 처럼 보인다.
  • frame의 좌표 이동은 view의 위치를 이동시키는 의미이지만, bounds의 좌표 이동은 sub view의 위치를 view가 해당 좌표만큼 이동했을 때의 위치로 다시 그리라는 의미이다. 즉, view가 특정 좌표만큼 이동했을 때의 화면을 보여주는 것이다.
  • 이것은 UIScrollView에서 스크롤하여 contentView를 이동해서 보거나 zoom할 때 동작과 연결된다. Scroll view에서도 우리가 터치해서 화면을 이동시키는 것은 bounds 좌표를 이동시키는 것과 같은 것이다.

Size

  • framesize는 해당 view를 포함하는 직사각형 영역의 크기를 나타낸다. View를 회전시킨다면 실제 view의 크기보다 더 큰 영역의 size를 나타낸다.
  • boundssize는 해당 view 자체의 크기를 나타낸다. View를 회전, 확대, 축소시켜도 원래 size를 유지한다.

언제 사용해야 할까?

  • frame은 화면에서 자기 자신의 위치 이동 및 크기 변경에 사용한다.
  • bounds는 현재 view의 위치 및 크기는 그대로 두고, 현재 view에서 하위 view들의 위치를 변경할 때 사용될 수 있다.
    1. draw(_:)에서 view 안에 그림을 그릴 때
    2. 회전, 크기변경 등 transform 이후 원래 view의 크기를 알고 싶을 때
    3. View의 위치를 그대로 하면서 하위 view들을 정렬하려는 경우