Frame과 Bounds의 차이

Frame과 Bounds는 UIView의 instance property이다

두 개념 모두 뷰의 위치와 사이즈를 반환하는 CGRecy 타입 변수이다.
frame과 bounds 모두 origin과 size를 가지는 사각형 모양으로 그려진다. 즉, x,y좌표,너비,높이를 가진다고 할 수 있다.

정의는?

Frame : SuperView의 좌표시스템 안에서 View의 위치와 크기를 나타낸다.
Bounds : View의 위치아 크기를 자신만의 좌표시스템 안에서 나타낸다.

둘의 차이는? -> SuperView 기준 vs 자신 기준

Frame

The frame rectangle, which describes the views location and size in its superviews coordinate system.
var frame: CGRect { get set }
  • frame은 superview의 좌표계에서 뷰의 크기와 위치를 정의하며 레이아웃 작업 중 이 frame을 사용하여 view의 size와 loaction을 설정 할 수 있다.
  • size와 location을 설정하면 center속성이 변경되고 그에따라 bounds사각형의 size가 변경된다.
  • frame사각형의 좌표는 항상 point단위로 지정된다.
  • frame을 변경하면 draw(_: )메소드를 호출하지 않아도 view가 자동으로 다시 표시된다.
  • frame을 변경할 때 draw(_: )메소드를 호출하도록하려면 contendMode 속성을 UIView.ContentMode.redraw로 설정해야 한다.
  • frame 속성에 대한 변경 사항은 애니메이션 될 수 있다.

Bounds

The bounds rectangle, which describes the views location and size in its own coordinate system.
var bounds: CGRect { get set }
  • 기본 bounds의 origin은 (0,0)이고 size는 frame속성의 size와 같다.
  • bounds의 size를 변경하면 center point을 기준으로 view가 늘어나거나 줄어든다.
  • bounds의 size를 변경함에따라 frame속성의 size 또한 변경된다.
  • frame과 마찬가지로 bounds를 변경하면 draw(_:)메소드를 호출하지 않고도 자동으로 view가 다시 표시된다.
  • frame과 마찬가지로 draw(_:)메소드를 호출하도록 하려면 contentMode속성을 UIView.ContentMode.redraw로 설정해야 한다.
  • bounds속성을 변경하는것은 애니메이션 될 수도 있다.

주된 사용법

  • frame은 UIView의 위치나 크기를 설정할 때 사용한다. 스토리보드에서 우측에 X좌표와 Y좌표가 frame의 좌표이다.
  • bounds는 View의 크기를 알고 싶거나 View 내부의 그림을 그릴 때 사용한다.

댓글남기기