반응형
View의 계층구조
1. view의 계층구조는 superView, subView, siblingView 로 구성
- view의 계층구조는 superView, subView, siblingView 로 특정되며 이는 drawing순서를 결정짓는다.
- superView와 subView의 관계에서는 superView가 우선해서 그려진다.
- 동일한 superView 내부에 여러 siblingView가 있다면 먼저 addSubView가 된 순으로 drawing된다.
- siblingView가 겹쳐질 때는 , 먼저 drawing된 View가 가려진다.
그림출처: KxCoding
2. superView와 subView의 계층 구조에 따른 몇가지 특징
- superView를 제거하면 subView도 함께 제거된다.
- superView의 투명도는 subView에도 적용된다.
- superView의 size가 변하면 subView에도 적용된다.
- superView는 subView를 array로 관리한다.
3. subView 관리를 위한 methods
// subView추가
superView.addSubView(_:)
// superView제거
removeFromSuperView()
// subView를 한번에 제거하는 함수는 없지만 아래 클로저를 통해 가능
superView.subviews.forEach {$0.removeFromSuperview()}
// view1을 추가
self.view.addSubview(self.view1)
// view1을 0번째에 삽입
self.view.insertSubview(view: self.view1, at: 0)
insertSubview(at:)
// 지정한 서브뷰 아래에 서브뷰를 추가
insertSubview(:belowSubview)
// 지정한 서브뷰 위에 서브뷰를 추가
insertSubview(:aboveSubview)
// view1을 가장 앞으로
self.view.bringSubview(toFront: self.view1)
// view1을 가장 뒤로
self.view.sendSubview(toBack: self.view1)
// 0번째 view와 1번째 view의 위치를 변경한다.
self.view.exchangeSubview(at: 0, withSubviewAt: 1)
// subView에는 tag를 붙여 addSubView하기
subView.tag = 1
let assignSubView = superView.viewWithTag(1)
//assignSubView는 subView를 가리킴
//특정 View를 superView인지 확인
let superView = UIView()
let subView = UIView()
superView.addSubview(subView)
let isSuperView: Bool = subView.isDescendant(of: superView)
print(isSuperView) // true
그외 다양한 함수로 View를 동적으로 관리가 가능
• willRemoveSubview(:),
didAddSubview(:)
willMove(toSuperview:),
didMoveToSuperview willMove(toWindow:),
didMoveToWindow
반응형
'모바일앱 > iOS' 카테고리의 다른 글
TIL 로컬라이징, 써드파티 (0) | 2022.03.19 |
---|---|
로그를 출력할 때 사용하는 함수들 (0) | 2022.03.18 |
error - Command CompileSwiftSources failed with a nonzero exit code (0) | 2022.03.18 |
디자인패턴 - MVC MVVM (0) | 2022.03.16 |
error - Extensions must not contain stored properties (0) | 2022.03.13 |
코코아팟 Hero 라이브러리 (0) | 2022.03.11 |
앱의 다크모드를 바꾸는 여러가지 방법 (0) | 2022.03.09 |
error - cannot find [ ] in scope iphoneSE3공개 (0) | 2022.03.08 |