안녕하세요. 이번에 알고있으면 좋은 iOS 지식을 정리하고자 합니다.
이번에 Frame VS Bounds 차이점을 알아보고자 합니다.
간략 정보
Frame : 뷰의 위치가 부모뷰에 의해 결정된다.
Bounds : 뷰의 위치가 자신의 위치값에 의해 결정된다.
글로는 정확히 이해되지 않아 그림으로 설명하겠습니다.
1번, 2번 그림의 차이점으로 뷰의 위치가 부모뷰의 결정된다. 를 그림으로 표현했습니다.
위와 같이 X, Y 좌표가 Frame 일때 (15, 30), Bounds 일때 (0, 0) 으로 표기 되는 걸 알 수 있습니다.
그러면 Width, Height 값은 차이가 없을까요?
3번 4번 그림으로 설명해 드리면, 결과적으로는 차이가 있습니다.
Transform 값을 통해 뷰를 회전 시켜 설명드리면
Frame 일때는 회전된 반경의 부모기준으로 잡힌 영역 만큼 나오게 됩니다.
반면 Bounds의 경우는 회전은 고려하지 않고 본인의 영역 값만 나오게 됩니다.
추가적으로 Playground 샘플 코드와 결과도 공유합니다. (좌표영역참조)
Playground 샘플 코드
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
32
33
34
|
import UIKit
import PlaygroundSupport
//
// Frame, Bounds 차이점 알아보기
class MyViewController : UIViewController {
override func loadView() {
let view = UIView()
view.backgroundColor = .white
self.view = view
//
// 기존적인 Frame, Bounds 차이점.
let tempView = UIView()
tempView.backgroundColor = .red
tempView.frame = CGRect(x: 50, y: 80, width: 200, height: 100)
view.addSubview(tempView)
//
print("tempView Frame : \(tempView.frame)")
print("tempView Bounds : \(tempView.bounds)")
//
// 회전했을때의 차이점.
let tempTransformView = UIView()
tempTransformView.backgroundColor = .black
tempTransformView.frame = CGRect(x: 50, y: 300, width: 200, height: 100)
tempTransformView.transform = .init(rotationAngle: -0.5)
//
print("tempTransformView Frame : \(tempTransformView.frame)")
print("tempTransformView Bounds : \(tempTransformView.bounds)")
//
view.addSubview(tempTransformView)
}
}
// Present the view controller in the Live View window
PlaygroundPage.current.liveView = MyViewController()
| cs |
댓글
댓글 쓰기