HIT해
[iOS/Swift] UIViewRepresentable 이 무엇일까? 본문
https://developer.apple.com/documentation/swiftui/uiviewrepresentable
UIViewRepresentable | Apple Developer Documentation
A wrapper for a UIKit view that you use to integrate that view into your SwiftUI view hierarchy.
developer.apple.com
개발하면서 자주 보이는 이녀석 무엇일까?
UIViewRepresentable이란?
해당 뷰를 SwiftUI 뷰 계층 구조에 통합하는데 사용하는 UIKit 뷰에 대한 래퍼.
즉 SwiftUI와 UIKit를 함께 사용하는 상황에서 다리역할을 하는 프로토콜이다.
예를 들어 SceneKit 의 SCNView 는 UIKit에서 제공하는 3D 콘텐츠를 렌더링 하는 뷰인데 이 SCNView 를 SwiftUI에서 사용하려면 UIViewRepresentable 을 사용해 SwiftUI로 변환해주어야한다.
@MainActor @preconcurrency
protocol UIViewRepresentable : View where Self.Body == Never
UIViewRepresentable 필수 메서드
- makeUIView(context:)
- updateUIView(_:context:)
1. makeUIView
UIView를 생성하고 초기화 하는데 사용한다.
SwiftUI에서 이 메서드를 호출해 UIKit 뷰를 생성하고 여기서 반환한 UIView 는 SwiftUI 뷰 계층 구조에 포함된다.
func makeUIView(context: Context) -> SCNView {
let scnView = SCNView()
scnView.scene = loadScene() // 3D 씬 로드
scnView.backgroundColor = UIColor.clear // 투명한 배경 설정
scnView.allowsCameraControl = true // 카메라 제어 허용
return scnView
}
2. updateUIView
SwiftUI 에서 뷰의 상태가 변경될때 호출된다.
SwiftUI의 뷰가 변경될때 UIKit의 뷰가 해당 변경사항을 반영하도록 업데이트를 할 수 있다.
func updateUIView(_ uiView: SCNView, context: Context) {
// 필요 시, SCNView를 업데이트하는 로직을 추가
}
UIViewRepresentable을 사용하는 이유
SwiftUI가 매우 강력하고 직관적이지만, UIKit이 제공하는 모든 기능을 완전히 대체할 수는 없습니다. 특히 3D 렌더링, 지도 뷰, 또는 복잡한 사용자 정의 뷰 같은 특정 상황에서는 여전히 UIKit을 사용해야 합니다. 이럴 때, UIViewRepresentable을 사용하면 SwiftUI 프로젝트 내에서 UIKit의 기능을 활용할 수 있습니다.
예를 들어, 복잡한 3D 모델을 보여주고자 할 때 SceneKit의 SCNView를 사용해야 합니다. 이 SCNView는 UIKit의 뷰이므로, SwiftUI에서 바로 사용할 수 없습니다. 이때 UIViewRepresentable을 사용하여 SCNView를 SwiftUI에서 활용할 수 있게 됩니다.
정리하자면
Swift로 다양한 기능을 활용하려면 SwiftUI 뿐만아니라 UIKit에 대한 이해와 결합 방법을 숙지해두는것이 좋을 것 같다!
'Swift > Swift CS' 카테고리의 다른 글
[iOS/SwiftUI] TCA 프로젝트 뜯어보기 (0) | 2024.08.26 |
---|---|
[iOS/UIKit] UIKit 란 무엇일까 (0) | 2024.08.25 |
[iOS/Swift] Alamofire (0) | 2024.08.22 |
[iOS/Swift] TCA (0) | 2024.08.20 |
[Swift 기초문법 - 37] 디자인패턴 Builder (0) | 2024.08.15 |