티스토리 뷰

반응형

iOS에서 Frame과 Bounds의 차이

iOS에서 frameboundsUIView 클래스의 두 가지 중요한 속성으로, 각각의 차이점과 사용 방법을 이해하는 것이 중요합니다. 이 두 속성은 뷰의 위치와 크기를 정의하는 데 사용되지만, 서로 다른 관점을 제공합니다.

1. Frame

frame슈퍼뷰(superview)를 기준으로 한 뷰의 위치와 크기를 나타냅니다. 즉, 뷰가 부모 뷰 내에서 어디에 위치하는지, 그리고 얼마나 큰지에 대한 정보를 제공합니다.

구성 요소:

  • origin: 뷰의 위치를 나타내며, 부모 뷰의 좌표계에서 측정됩니다.
  • size: 뷰의 크기를 나타냅니다.

예시:


let viewFrame = myView.frame
print("View's frame origin: \(viewFrame.origin)")   // 부모 뷰 기준의 위치
print("View's frame size: \(viewFrame.size)")       // 뷰의 크기
        

특징:

  • 뷰가 슈퍼뷰에 대해 어떻게 배치되는지를 알려줍니다.
  • 회전이나 스케일 변환(transform)이 적용되면 frame의 값은 바뀔 수 있습니다.

예시 이미지:

+------------------------+  <- 슈퍼뷰
|                        |
|     +-----------+      |  <- 서브뷰 (frame으로 정의된 위치와 크기)
|     |  Subview  |      |
|     +-----------+      |
|                        |
+------------------------+
    

2. Bounds

bounds자기 자신을 기준으로 한 뷰의 크기와 내부 좌표계를 나타냅니다. 즉, 뷰가 자체적으로 어떤 크기와 좌표계를 가지고 있는지를 알려줍니다. bounds는 뷰의 내부 요소들이 어떻게 배치되는지에 영향을 미칩니다.

구성 요소:

  • origin: 뷰의 내부 좌표계의 원점을 나타냅니다. 기본값은 (0, 0)입니다.
  • size: 뷰의 크기를 나타냅니다.

예시:


let viewBounds = myView.bounds
print("View's bounds origin: \(viewBounds.origin)")   // (0, 0) 또는 뷰 내부 좌표계의 원점
print("View's bounds size: \(viewBounds.size)")       // 뷰의 크기
        

특징:

  • 뷰의 내부 좌표계와 관련이 있습니다.
  • 뷰 자체의 크기에는 변함이 없지만, origin을 변경하면 뷰 내의 서브뷰들이 움직이는 것처럼 보일 수 있습니다.
  • 회전이나 스케일 변환이 일어나도 bounds는 변경되지 않으며, 뷰 자체의 크기만을 의미합니다.

예시 이미지:

+------------------------+  <- 자신의 좌표계
|     +-----------+      |
|     |           |      |
|     |  Content  |      |  <- bounds로 정의된 내부 크기와 원점
|     |           |      |
|     +-----------+      |
+------------------------+
    

3. Frame과 Bounds의 차이점

  • frame슈퍼뷰를 기준으로 한 뷰의 위치와 크기를 나타냅니다.
  • bounds자기 자신을 기준으로 한 뷰의 크기와 내부 좌표계를 나타냅니다.
  • frame은 슈퍼뷰와의 관계를 나타내는 반면, bounds는 뷰의 내부 레이아웃에만 영향을 미칩니다.

4. Frame과 Bounds의 사용 예시

Frame 사용:


// 슈퍼뷰에서 서브뷰의 위치와 크기 설정
myView.frame = CGRect(x: 50, y: 100, width: 200, height: 150)
        

여기서 x, y는 슈퍼뷰 기준에서 뷰의 위치를 나타냅니다.

Bounds 사용:


// 뷰 내부에서 좌표계의 원점을 변경
myView.bounds.origin = CGPoint(x: 10, y: 10)
        

여기서는 뷰의 좌표계 원점이 이동하여 내부 콘텐츠가 이동하는 것처럼 보입니다.

5. 요약

  • frame은 뷰가 슈퍼뷰에서 어떻게 배치되는지 나타냅니다.
  • bounds는 뷰의 내부 좌표계와 크기를 나타냅니다.
  • 두 속성은 종종 함께 사용되지만, 서로 다른 관점을 제공하므로 각각의 목적에 맞게 사용해야 합니다.
반응형
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/08   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
글 보관함