[iOS] Frame과 Bounds의 차이
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 view’s location and size in its superview’s 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 view’s 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 내부의 그림을 그릴 때 사용한다.
댓글남기기