뷰 계층(View hierarchy)
뷰 계층구조와 서브뷰 관리
- 뷰는 자신의 콘텐츠를 보여줌
- 다른 뷰를 위한 컨테이너로써의 역할도 함
- 하나의 뷰가 다른 뷰를 포함할 때, 두 뷰 사이에 부모-자식 관계가 생성
- 해당 관계에서는
자식뷰는 서브뷰(subview)
로, 부모뷰는 슈퍼뷰(superview)
- 슈퍼뷰와 서브뷰의 관계에서 서브뷰가 불투명할 경우 슈퍼뷰가 서브뷰에 가려짐
![](https://velog.velcdn.com/images/rudin_/post/40f7b610-f31d-4dec-a3d1-66b4c09b553c/image.png)
- 서브뷰가 반투명할 경우 서브뷰와 슈퍼뷰의 콘텐츠가 서로 섞임
![](https://velog.velcdn.com/images/rudin_/post/0b007083-1910-45a1-8d1e-9a1fa8cd46bd/image.png)
- 만약 하나의 슈퍼뷰에 포함된 두 서브뷰가 서로 겹치게 되면, 나중에 추가된(또는 서브뷰 배열의 끝으로 옮겨진) 서브뷰가 맨 위에 보여지게 됨
- 슈퍼뷰는 하나의 배열 안에 서브뷰를 순서대로 저장
![](https://velog.velcdn.com/images/rudin_/post/62ce4de0-d0dc-4576-b987-c66c7d01b4cd/image.png)
- 두 서브뷰가 모두 반투명할 경우 뒤에 있는 모든 뷰들이 섞여 화면에 보여지게 됨
![](https://velog.velcdn.com/images/rudin_/post/e800676d-38d9-410f-92ac-959aad695ef1/image.png)
뷰 계층의 생성과 관리
- 부모뷰.
addSubView(_:)
메서드를 호출
removeFromSuperView()
메서드를 호출
insertSubview(_:at:)
bringSubView(toFront:)
sendSubview(toBack:)
뷰 추가
![](https://velog.velcdn.com/images/rudin_/post/0c83e840-77b6-4fa5-a58f-24fffed3f411/image.png)
뷰 삭제
![](https://velog.velcdn.com/images/rudin_/post/f6f229e2-008c-457e-964d-056173e6df8b/image.png)
뷰의 좌표계
![](https://velog.velcdn.com/images/rudin_/post/7419a75e-3d06-429c-a399-75b479d26f60/image.png)
![](https://velog.velcdn.com/images/rudin_/post/2293f915-2aa2-42ca-bd57-665210219ce2/image.png)
CGPoint의 x, y와 CGSize의 width, height는 모두 부동소수점 타입인 CGFloat으로 표현
![](https://velog.velcdn.com/images/rudin_/post/cc9a5b1e-43a1-41ed-8c53-746410c1feb6/image.png)
참고: 야곰