Frame과 Bounds
우선 Frame과 Bounds 둘 다 UIView의 인스턴스 프로퍼티이다.
Frame
공식문서에 따르면, superview의 좌표계에서 view의 위치·크기를 설명하는 사각형이라고 한다.
superview?
superview는 view의 계층구조에서 해당 view의 상위 view를 의미한다.
최상의 view가 아닌 한 계층 위의 view를 의미하므로 사용에 주의해야 한다!
Bounds
공식문서에 따르면, 자체 좌표계에서 view의 위치·크기를 설명하는 사각형이라고 한다.
공식문서만 읽고서는 큰 차이를 인지하기 어려워서 소들이님과 Zedd님의 블로그를 참고하였다.
Frame과 Bounds의 차이점
Frame과 Bounds의 위치 차이
하나의 뷰를 그린 후 Frame과 Bounds의 좌표 및 크기를 출력해 보았다.
넓이, 높이는 동일하게 나왔고 x, y 좌표만 다르게 출력되었다.
위에서 살펴본 것처럼 Frame은 자신의 상위뷰를 기준으로 위치를 지정하는 것이기 때문에 superview의 좌측 상단을 (0, 0) 즉, 원점으로 하여 상대적인 위치를 나타낸 것이고, Bounds는 자기 자신이 좌표계의 기준이 되기 때문에 x, y가 원점인 (0, 0)이 된다.
Size도 차이가 있을까?
위의 이미지처럼 사각형이 회전되지 않은 상태인 경우에는 width와 height가 동일하게 출력된다.
하지만 사각형을 기울이게 되면 크기로 인식하는 범위가 달라지기 때문에 크기가 달라진다.
Bounds의 size는 view 자체의 크기이기 때문에 회전을 하여도 size가 변하지 않는다.
하지만, Frame의 size는 view 자체의 크기가 아닌 View가 차지하는 영역을 감싸는 사각형의 크기이므로 회전을 하는 경우 size가 변경된다.
이렇게 size가 변경되면 origin(좌표)값 또한 변경될 수 있다는 것을 염두에 두어야 한다!
Frame과 Bounds는 각각 언제 사용될까?
Frame은 단순히 UIView의 위치, 크기를 나타낼 때 사용하게 된다.
Bounds 또한 UIView의 위치, 크기를 나타낼 때 사용하며, 자기 자신의 좌표계를 사용해야 할 때(view 내부에 그림을 그릴 때) 사용한다.
그리고 흔히 사용하는 ScrollView에서 화면을 스크롤할 때 bounds의 원리가 사용된다. (ScrollView의 bounds를 변경하여 ScrollView의 하위 뷰 중 어느 위치를 보여줄지를 결정한다.)
참고문서
GitHub - JeaSungLEE/iOSInterviewquestions: 👨🏻💻👩🏻💻iOS 면접에 나올 질문들 총 정리
👨🏻💻👩🏻💻iOS 면접에 나올 질문들 총 정리 . Contribute to JeaSungLEE/iOSInterviewquestions development by creating an account on GitHub.
github.com
frame | Apple Developer Documentation
The frame rectangle, which describes the view’s location and size in its superview’s coordinate system.
developer.apple.com
bounds | Apple Developer Documentation
The bounds rectangle, which describes the view’s location and size in its own coordinate system.
developer.apple.com
iOS) Frame vs Bounds 제대로 이해하기 (2/3)
안녕하세요 ~!! 소들입니닷 :) 오늘은 frame과 bounds에 대한 차이점 및 사용 용도에 대해 더 자세히 포스팅을 해볼 예정이예요 🌝 뭐... 깊게 들어갈 거라 심화 개념이라고 써놨습ㄴ디ㅏ 일단 하하
babbab2.tistory.com
iOS ) Frame과 Bounds의 차이 (1/2)
안녕하세요 :) Zedd입니다. 지금 다른 글을 쓰고있는데, 쓰면 쓸수록 쓸 주제가 많아집니다...급 이 글을 쓰게 됐어요 XD..아무튼 오늘은 저도 궁금했던 Frame과 Bounds의 차이를 알아볼거에요 :)다음글
zeddios.tistory.com