본문 바로가기

All Categories/iOS & Swift

iOS) frame과 bounds의 차이

반응형

안녕하세요 재희입니다! 오늘은 UIView의 frame과 bounds의 차이에 대해 알아보겠습니다.


UIView

 

Apple Developer Documentation

 

developer.apple.com

Configuring the Bounds and Frame Rectangles

 

frame과 bounds property는 각 뷰의 geometry를 정의합니다.

frame 프로퍼티는 super view의 좌표계에서 뷰의 원점과 dimension을 정의합니다.

bounds 프로퍼티는 view가 화면에 보이는 것에 대한 뷰의 내부 dimension을 정의하며, 사용자 정의 drawing code에는 거의 사용되지 않습니다.

bounds

 

Apple Developer Documentation

 

developer.apple.com

경계 직사각형, 자체 좌표계에서 뷰의 위치와 크기를 설명합니다.

Declaration

var bounds: CGRect { get set }

Discussion

기본 bounds의 원점은 (0, 0)이며, 크기는 frame property의 직사각형 크기와 동일합니다.

이 직사각형의 크기를 변경하면 중심점을 기준으로 뷰가 증가하거나 축소됩니다.

크기를 변경하면 frame property에 있는 직사각형의 크기도 일치하도록 변경됩니다.

bounds rectangle의 좌표는 항상 점으로 지정됩니다.

 

bounds rectangle을 변경하면 draw(_:) 메소드를 호출하지 않고 뷰가 자동으로 다시 표시됩니다.

UIKit에서 draw(_:) 메소드를 호출하도록 하려면 contentMode property를 UIView.ContentMode.redraw로 설정합니다.

 

이 속성의 변경 사항을 애니메이션을 설정할 수 있습니다.

 

frame

 

Apple Developer Documentation

 

developer.apple.com

super view의 좌표계에서 위치와 크기를 설명하는 frame 직사각형입니다.

Declaration

var frame: CGRect { get set }

Discussion

이 직사각형은 뷰의 좌표계에서 뷰의 크기와 위치를 정의합니다.

레이아웃 배치 작업 중에 이 직사각형을 사용하여 크기를 설정하고 뷰를 배치합니다.

이 property를 설정하려면 center property에 의해 지정된 점이 변경되고, 그에 따라 bounds 직사각형의 크기가 변경됩니다.

frame 직사각형의 좌표는 항상 점으로 지정됩니다.

 

Warning
transform property가 identity transform이 아닌 경우, 이 속성의 값이 정의되지 않으므로 무시해야 합니다.

 

frame 직사각형을 변경하면 draw(_:) 메소드를 호출하지 않고 자동으로 뷰가 다시 표시됩니다.

frame 직사각형이 변경될 때 UIKit에서 draw(_:) 메소드를 호출하도록 하려면 contentMode property를 UIView.ContentMode.redraw로 설정합니다.

 

이 속성의 변경 사항을 애니메이션으로 설정할 수 있습니다.

그러나 transform property에 동일하지 않은 transform이 포함된 경우, frame property 값이 정의되지 않으므로 수정하면 안 됩니다.

이 경우 center property를 사용하여 뷰의 위치를 변경하고 대신 bounds property를 사용하여 크기를 조정합니다.


frame vs bounds

  • frame의 origin 좌표는 super view를 기준으로, bounds자기 자신을 기준으로 설정된다.
  • frame위치 및 크기를 설정할 때 사용 (슈퍼뷰 좌표계 기준)
  • bounds하위 뷰를 내부적으로 변경하는 경우 사용 (자체 좌표계 기준)
  • view가 회전될 경우 frame은 슈퍼뷰에서 해당 view를 감싸는 직사각형 형태이므로, 실제 뷰의 size와 다를 수 있다.
  • bounds를 origin(자체 좌표계의 기준점)을 변경하면 해당 위치에서 뷰를 다시 그린다는 의미이다. ex) UIScrollView

 

감사합니다 :D

반응형