일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- isolate
- weatherkit
- SampleApp
- Xcode
- OpenAI
- builder
- swift
- AppleDeveloper
- tuist
- WiFi
- Adapter
- designpattern
- factory
- concurrency
- WWDC24
- Architecture
- network
- LifeCycle
- philipshue
- singleton
- dartz
- SwiftUI
- uikit
- dart
- flutter
- 문법
- EventLoop
- GIT
- iot
- state
Archives
- Today
- Total
Jaebi의 Binary는 호남선
SwiftUI에 UIKit 넣기 본문
목차
SwiftUI에 UIKit 넣기
SwiftUI는 `struct`로 뷰를 표시하고 UIKit은 `class`로 뷰를 표시
- 중간다리를 `UIViewRepresentable` 프로토콜과 `Coordinator`가 담당
UIView 관련 사용
- `UIViewRepresentable` 채택
- `typealias UIViewType`로 어떤 `UIViewType`인지 지정
- `makeUIView`에 `UIViewType`을 리턴
- `updateUIView`는 SwiftUI에서 뷰가 업데이트 될때 불리는 메소드로, 이곳에서 `delegate`와 같은 처리
- `makeCoordinator`는 뷰의 변경사항을 SwiftUI 인터페이스에 전달하는데 사용
- 뷰의 change가 앱의 다른 부분에 영향을 줄 경우 구현 (필수는 아님)
- 예시: SwiftUI에서 `UIActivityIndicatorView` 사용
- `makeUIView`에 `UIActivityIndicatorView`을 리턴
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
}
'Swift' 카테고리의 다른 글
Swift - 문법 (Property Wrappers) (0) | 2024.06.12 |
---|---|
Swift - 문법 (Protocols and Extensions, Error Handling, Generics) (0) | 2024.06.12 |
Swift - 문법 (Object and Classes, Enumerations and Structures, Concurrency) (0) | 2024.06.12 |
Swift - 문법 (Values, Control Flow, Functions and Closures) (0) | 2024.06.11 |
Philips Hue 연동 프로젝트 (0) | 2024.06.08 |