iOS에서 frame과 bound의 차이 이해하기

2020. 11. 6. 15:24iOS

iOS에서는 View안에서 좌표시스를 나타내는 표현으로 Frame과 Bounds라는 것이 존재합니다.

하지만 이 둘 사이에는 표현하는 것이 무엇이냐에 따른 차이가 존재합니다. 이에 대한 차이를 알아보도록 하겠습니다.

Frame

먼저 Frame입니다. !

Frame의 정의는 Apple 공식 개발자 문서에 따르면

'상위 뷰(Superview)의 좌표시스템안에서 View의 위치와 크기'

를 나타낸다고 합니다.

이 말인 즉, 자신의 상위 뷰(SuperView) 안에서 자신의 위치(x, y, width, height) 값을 나타냅니다. 이 위치는 SuperView의 Origin(0, 0), 즉 좌측 상단 지점으로부터 떨어진 x, y 좌표값을 의미합니다.

Xcode 상에서 봐볼까요 ?!

최상위 View를 SuperView라 지정하고, 나머지 그 자식 뷰를 SubView, 그리고 그 안에 있는 자식을 SubSubView라 지칭해 봅시다.

그리고 SubView를 클릭했을 때 우측 Inspector Area에서는 다음과 같은 좌표계를 확인해 볼 수 있습니다.

 

또한 그 자식뷰의 자식 = SubSubView에서는 SubView의 Origin(좌측 최상단)을 기준으로 좌표계가 표현되어 있는 것을 볼 수 가 있죠.

 

Bounds

다음은 Bounds입니다.

Bounds의 정의는 다음과 같이 내려지고 있습니다.

'뷰의 위치와 크기를 자신만의 좌표시스템안에서 나타냅니다' 

즉, 상위 뷰와는 전혀 상관 없이 본인 안에서 좌표 시스템을 나타내게 됩니다. 따라서 Bounds를 출력해봤을때 x,y 좌표는 0, 0만을 나타냅니다.

따라서 이 Bounds 값은 상위뷰와의 관계에서 전혀 영향을 받지 않고 오직 자신의 내부에 있는 자식에게 영향을 주게 됩니다.

따라서 x, y 좌표를 변경을 하게된다면, 본인의 위치는 변하지 않지만, 자기 내부의 자식들의 좌표계의 영향을 주게 됩니다.

실제로,

subView.bounds.origin.x = 60

subView.bounds.origin.y = 50

와 같이 변경을 해주었을때 자식들의 위치는 Origin(좌측 최상단) 값이 50, 60의 위치를 기준으로하여 좌표값이 설정되게 됩니다.

따라서 본인의 위치는 변경이 되지 않지만, 자식들의 좌표계는 변경되는 것이지요 !

다음의 예시를 보면서 글마치도록 하겠습니다. !! 읽어주셔서 감사합니다.

이 상태로 주황색 SubView의 Origin을 변경하게 된다면 밑에 처럼 변경됩니다.