open var frame: CGRect
open var bounds: CGRect
frame
과 bounds
모두 CGRect 타입이다. 즉 높이와 너비를 가진 사각형으로 그려질 수 있고 좌표로 위치를 나타낸다. 하지만 frame
과 bounds
는 좌표의 기준이 다르다. frame
은 superview
를 기준으로, bounds
는 자신의 좌표계를 기준으로 위치 및 크기를 나타낸다.
아래의 그림은 각 A, B, C의 frame
과 bounds
를 나타내고 있다. A는 B의 superview
이며, B는 C의 superview
이다. bounds
는 자신의 좌표계를 기준으로 기본적인 값은 frame
은 superview
의 좌표계를 기준으로 나타내기 때문에 B는 A의 좌표계를 기준으로, C는 B의 좌표계를 기준으로 나타내고 있다.
아래의 그림에서 B의 frame
을 frame
의 값은 변하지 않았지만 superview
인 B의 좌표가 변한만큼 이동했다. 반면에 bounds
는 자신의 좌표계가 기준이므로 superview
의 좌표와 상관없이 일정하다.
그렇다면 B의 bounds
를 이동시키면 어떻게 될까? 비교1에서 B의 bounds
를
frame
과 bounds
는 사이즈를 나타낼 때도 차이점이 있다. frame
은 superview
의 영역을 얼마만큼 차지하는지 나타내고, bounds
는 자신의 영역을 나타낸다. 아래의 그림은 높이가 70, 너비가 50인 B를 회전시켰을 때 frame.size
와 bounds.size
의 차이를 보여준다.