[iOS] frame VS bounds | 2편

!·2023년 5월 4일
0

iOS

목록 보기
22/22

Overview

지난편에 이어서 frame과 bounds의 2편입니다.


frame.size VS bounds.size

frame과 bounds의 차이는 지난편에서 설명했었습니다.
frame.size는 회전한 뷰의 경우 뷰를 외적하는 가장 작은 직사각형을 토대로 결정되지만, bounds.size는 뷰가 회전한 경우에도 뷰 자체의 크기를 토대로 결정되었습니다.


frame.origin

그림을 토대로 설명하겠습니다.

SecondView의 frame.origin은 (50, 50)
ThirdView의 frame.origin은 (25, 50)입니다.
bounds.origin은 모두 (0,0)입니다.

로그를 확인해보면 이를 확인할 수 있습니다.

이 때, SecoundView의 frame.origin을 (50, 50) 에서 (75, 75)로 이동시켜보겠습니다.

SecondView의 frame.origin을 변경했으므로, FirstView에서 SecondView의 위치가 변경되는건 당연합니다.
하지만, SecondView의 서브 뷰인 ThirdView도 화면 상의 위치가 변경됨을 알 수 있습니다.
(이 때도 모든 뷰의 bounds.origin 속성은 (0, 0)으로 변함 없습니다.)


bounds.origin

이번에는 SecondView의 bounds.origin 속성을 (0, 0)에서 (25, 25)로 변경하겠습니다.

frame.origin의 속성을 변경한 경우와 다르게 SecondView의 위치는 변경되지 않고, SecondView의 서브 뷰의 위치만 변경되었습니다.

이를 통해 다음 2가지를 알 수 있습니다.

  1. frame.origin을 변경하는 경우, 해당 뷰의 위치가 변경된다.
  2. bounds.origin을 변경하는 경우, 해당 뷰의 서브 뷰의 위치가 변경된다.

로그를 확인해보면 이를 확인할 수 있습니다.

신기한 점은, secondView의 bounds.origin 속성을 변경해서 해당 뷰의 서브 뷰인 third View의 위치가 바뀌었음에도 불구하고 third View의 frame.origin은 바뀌지 않았다는 점입니다.
즉, A라는 뷰의 위치는 A뷰의 frame.origin과 A의 슈퍼 뷰의 bounds.origin 속성을 함께 고려해 결정됨을 알 수 있습니다. 이에 대한 자세한 설명은 개발자 소들이님 블로그에서 찾아볼 수 있습니다.

이 특성을 통해 스크롤 뷰의 bounds.origin 값을 변경하면서 스크롤 구현할 수 있게됩니다.


참고 자료

https://babbab2.tistory.com/45

profile
개발자 지망생

0개의 댓글