Jaebi의 Binary는 호남선

SwiftUI에 UIKit 넣기 본문

Swift

SwiftUI에 UIKit 넣기

jaebijae 2024. 5. 6. 20:03

SwiftUI에 UIKit 넣기

SwiftUI는 struct로 뷰를 표시하고 UIKit은 class로 뷰를 표시

  • 중간다리를 UIViewRepresentable 프로토콜과 Coordinator가 담당

UIView 관련 사용

  • UIViewRepresentable 채택
  • typealias UIViewType로 어떤 UIViewType인지 지정
  • makeUIViewUIViewType을 리턴
  • updateUIView는 SwiftUI에서 뷰가 업데이트 될때 불리는 메소드로, 이곳에서 delegate와 같은 처리
  • makeCoordinator는 뷰의 변경사항을 SwiftUI 인터페이스에 전달하는데 사용
    • 뷰의 change가 앱의 다른 부분에 영향을 줄 경우 구현 (필수는 아님)
  • 예시: SwiftUI에서 UIActivityIndicatorView 사용
    • makeUIViewUIActivityIndicatorView을 리턴
struct MyUIKitUIActivityIndicatorView: UIViewRepresentable {
    func makeUIView(context: Context) -> UIViewType {
        UIActivityIndicatorView(style: .large)
    }
    
    func updateUIView(_ uiView: UIViewType, context: Context) {}
    
    func makeCoordinator() -> Coordinator {}
    
    typealias UIViewType = UIActivityIndicatorView
}

UIViewController 관련 사용

  • UIViewControllerRepresentable 채택
  • typealias UIViewControllerType로 어떤 UIViewControllerType인지 지정
  • 위에서 본 UIViewRepresentable 원리와 동일하게 사용
  • 예시: SwiftUI에서 IViewControllerRepresentable를 준수하는 MyActivityView 사용
struct MySwiftUIViewController: UIViewControllerRepresentable {
    var activityItems: [Any]
    var applicationActivities: [UIActivity]? = nil
    
    func makeUIViewController(context: Context) -> UIViewControllerType {
        UIActivityViewController(activityItems: activityItems, applicationActivities: applicationActivities)
    }
    
    func updateUIViewController(_ uiViewController: UIViewControllerType, context: Context) {}
    
    func makeCoordinator() -> Coordinator {}
    
    typealias UIViewControllerType = UIActivityViewController
}