Skip to content

Latest commit

 

History

History
40 lines (26 loc) · 2.45 KB

frame, bounds.md

File metadata and controls

40 lines (26 loc) · 2.45 KB

frame vs bounds

open var frame: CGRect
open var bounds: CGRect

framebounds 모두 CGRect 타입이다. 즉 높이와 너비를 가진 사각형으로 그려질 수 있고 좌표로 위치를 나타낸다. 하지만 framebounds는 좌표의 기준이 다르다. framesuperview를 기준으로, bounds는 자신의 좌표계를 기준으로 위치 및 크기를 나타낸다.

비교1

아래의 그림은 각 A, B, C의 framebounds를 나타내고 있다. A는 B의 superview이며, B는 C의 superview이다. bounds는 자신의 좌표계를 기준으로 기본적인 값은 $(0, 0)$이다. 반면에 framesuperview의 좌표계를 기준으로 나타내기 때문에 B는 A의 좌표계를 기준으로, C는 B의 좌표계를 기준으로 나타내고 있다.

그림1

비교2

아래의 그림에서 B의 frame$(10, 10)$만큼 이동시켰다. B의 현재 위치에서 $(10, 10)$만큼 이동한 $(20, 30)$에 다시 그려졌다. C의 좌표를 살펴보면 frame의 값은 변하지 않았지만 superview인 B의 좌표가 변한만큼 이동했다. 반면에 bounds는 자신의 좌표계가 기준이므로 superview의 좌표와 상관없이 일정하다.

그림2

비교3

그렇다면 B의 bounds를 이동시키면 어떻게 될까? 비교1에서 B의 bounds$(10, 10)$만큼 이동시키면 아래의 그림과 같다.

그림3

비교4

framebounds는 사이즈를 나타낼 때도 차이점이 있다. framesuperview의 영역을 얼마만큼 차지하는지 나타내고, bounds는 자신의 영역을 나타낸다. 아래의 그림은 높이가 70, 너비가 50인 B를 회전시켰을 때 frame.sizebounds.size의 차이를 보여준다.

그림4