addSubview(_:) vs addChild(_:)
UIPageViewController를 구현하던 중
view.addSubview(navigationView)
addChild(pageViewController)
view.addSubview(pageViewController.view)
각 컴포넌트
1. navigationView(UIView type)
2. pageViewController(UIViewController type)
를 화면에 추가하는 부분에 있어서
차이점이 있다는것을 알게되었습니다.
addSubview(_:)는 UIView에 subview를 추가하는 메소드입니다.
UIView 형태를 추가할 때 사용하구요.
1. sub 뷰는 parent 뷰의 좌표계를 따르며
2. parent 뷰가 이동하거나 크기가 변경되면 sub 뷰 또한 변경된다
는 특징을 가지고 있습니다.
addChild(_:)는 해당 vc에 자식 vc를 추가하는 메소드 입니다.
1. 부모 뷰 컨트롤러의 생명 주기 메소드와 이벤트를 전달받게 되며,
2. 자식 vc를 추가한 이후 didMove(toParent:) 메소드를 호출하여 부모 뷰 컨트롤러에게 전달해야한다고 합니다.
pageViewController.didMove(toParent: self)
따라서 addChild(pageViewController)를 호출하여
pageViewController를 자식 vc로 추가하고,
view.addSubview(pageViewController.view)를 호출하여
해당 뷰 컨트롤러의 뷰를 현재 뷰 컨트롤러의 뷰에 추가합니다.
(+pageViewController.didMove(toParent: self) 메소드 까지)
출처
https://developer.apple.com/documentation/uikit/uiviewcontroller/1621405-didmove
https://developer.apple.com/documentation/uikit/uiviewcontroller/1621394-addchild
https://developer.apple.com/documentation/uikit/uiview/1622616-addsubview