개인공부
UIHostingController _ 페이지 컨트롤러 호스팅
h_luz
2024. 7. 6. 19:48
SwiftUI랑 UIKit 을 동시에 사용해서 호스팅하는 것을 공부했다.
이번 프로젝트를 하면서 애니메이션이나 디자인 적으로 UIKit으로는 구현하기 어려운 부분을 SwiftUI로 구현했는데
너무 큰 매력을 느껴서 앞으로 공부해보려고 한다 ! (TMI...)
UIHostingController
: SwiftUI 뷰 계층을 관리하는 UIKit 뷰 컨트롤러
https://developer.apple.com/documentation/swiftui/uihostingcontroller
import SwiftUI
struct PageControlButton: View {
//PageControlButton SwiftUI로 구현
}
var pageControlButton: UIHostingController<PageControlButton>!
override func viewDidLoad() {
super.viewDidLoad()
setupPVC()
setupPageControlButton()
}
func setupPageControlButton() {
let pageControlButtonView = PageControlButton(onIndexChanged: { [weak self] index in
self?.navigateToPage(index: index)
})
pageControlButton = UIHostingController(rootView: pageControlButtonView)
addChild(pageControlButton)
view.addSubview(pageControlButton.view)
pageControlButton.didMove(toParent: self)
pageControlButton.view.backgroundColor = .clear
pageControlButton.view.snp.makeConstraints {
$0.leading.trailing.equalToSuperview().inset(90)
$0.bottom.equalTo(view.safeAreaLayoutGuide).inset(15)
$0.height.equalTo(70)
}
}
이 페이지 컨트롤러 버튼을 ViewController들을 전환하는데 사용해서 onIndexChanged같은 것들이 있는데,
형식은 그냥 UIHostingController를 사용하여 SwiftUI 뷰인 PageControlButton을 UIKit 뷰 계층에 포함시켜주는 방식
즉, UIHostingController는 SwiftUI 뷰를 UIKit 뷰 계층에 통합할 수 있도록 도와주는 컨테이너이다.