티스토리 뷰

iOS & swift

addSubview(_:) vs addChild(_:)

ggasoon2 2024. 7. 11. 19:44

 

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

 

댓글