The frame rectangle, which describes the view’s location and size in its superview’s coordinate system.
(슈퍼뷰 좌표계에서 뷰의 위치와 크기를 설명하는 프레임 직사각형.)
The bounds rectangle, which describes the view’s location and size in its own coordinate system.
(자체 좌표계에서 뷰의 위치와 크기를 설명하는 경계 직사각형.)
var bounds: CGRect { get set }
두 개념 모두 뷰의 위치와 사이즈를 반환하는 CGRect 타입 변수이다.
frame은 해당 뷰가 속해있는 상위 뷰의 좌표계를 기준으로 정해진 크기와 좌표이고,
bounds는 자기 자신의 좌표계를 기점으로 정해진 크기와 좌표이다.
즉, frame과 bounds의 차이는 좌표계의 시작점 이라고 볼 수 있다.
frame -> 슈퍼뷰
bound -> 자체 좌표
An object that manages the content for a rectangular area on the screen.
뷰란 사용자의 앱 위에 그려지게 되는 Label, Button 등과 같은 컴포넌트들을 view라고 정의한다.
SwiftUI, UIKit을 통해서 생성할 수 있으며 이러한 뷰들은 UIView라는 클래스로 생성된 객체들이다. 해당 객체들을 통해서 유저와 상호작용이 가능하다.
let rect = CGRect(x: 10, y: 10, width: 100, height: 100)let myView = UIView(frame: rect)
뷰를 생성하기 위해서는 크기와 좌표가 필요하고 좌표와 크기는 CGRect라는 형태로 표현한다.
크기와 좌표가 주어지면 해당 조건에 맞게 화면 위에 그려지게 된다.
A structure that contains the location and dimensions of a rectangle.
init(origin: CGPoint, size: CGSize)Creates a rectangle with the specified origin and size.
init(x: Double, y: Double, width: Double, height: Double)Creates a rectangle with coordinates and dimensions specified as floating-point values.
init(x: Int, y: Int, width: Int, height: Int)Creates a rectangle with coordinates and dimensions specified as integer values.
init(x: CGFloat, y: CGFloat, width: CGFloat, height: CGFloat)Creates a rectangle with coordinates and dimensions specified as CGFloat values.
CGRect란 뷰의 크기와 좌표계를 담는 구조체이다.
초기화 방법에는 여러가지가 있지만 기본적으로 CGFloat라는 실수 형태의 자료형을 통해서 크기와 좌표를 표현한다.
여기서 CG는 CoreGraphics의 약자로 그래픽 관련 즉 화면 표현에 대한 자료들은 모두 CG로 시작하는 자료형이다.
iOS의 좌표계 시스템은 뷰의 좌측 상단이 원점(0, 0)이며 화면의 수직이 y축, 화면의 수평면이 x축이다.
즉 y값이 증가하게 되면 아래로 이동하고, x값이 증가하게 되면 우측으로 이동한다.
위는 직관적으로 둘의 차이점에 대해 알 수 있는 예시이다.
B가 기울어진 상태에서 frame의 경우, 상위 뷰 A의 좌표계에서 차지하는 크기는 좌표를 기준으로 사각형을 그려 표현하기 때문에
B의 frame은 Point(140, 65), Size(320, 320)이 반환되며,
B의 bounds는 Point(0, 0), Size(200,250)이 반환된다.