SwiftUIのプロジェクトに SPM 経由でTatsiライブラリの統合を行っていますが、Tatsi ビューの上部にある Done が呼び出されず、選択した画像を取得できないため、問題が発生しています。
UIViewControllerRepresentable による統合のコードは次のとおりです。
import SwiftUI
import UIKit
// 1. Add Import Tatsi and Import Photos to your Swift
import Tatsi
import Photos
struct TatsiViewController: UIViewControllerRepresentable {
@Binding var show: Bool
func makeCoordinator() -> Coordinator {
Coordinator(self)
}
func makeUIViewController(context: UIViewControllerRepresentableContext<TatsiViewController>) -> TatsiPickerViewController {
// 2. (Optional) Create an instance of TatsiConfig and configure the settings.
var config = TatsiConfig.default
config.showCameraOption = false
config.supportedMediaTypes = [.image]
config.firstView = .userLibrary
// 3. Create an instance of TatsiPickerViewController. TatsiPickerViewController(config:) allows you to use the config from the previous step
let pickerViewController = TatsiPickerViewController(config: config)
// 5. Set the pickerDelegate on TatsiPickerViewController
pickerViewController.delegate = context.coordinator
// 6. Present the TatsiPickerViewController
return pickerViewController
}
func updateUIViewController(_ uiViewController: TatsiPickerViewController, context: UIViewControllerRepresentableContext<TatsiViewController>) {
uiViewController.delegate = context.coordinator
}
// 4. Implement TatsiPickerViewControllerDelegate
final class Coordinator: NSObject, TatsiPickerViewControllerDelegate, UINavigationControllerDelegate {
var parent: TatsiViewController
init(_ parent: TatsiViewController) {
self.parent = parent
}
func pickerViewController(_ pickerViewController: TatsiPickerViewController, didPickAssets assets: [PHAsset]) {
print("Picked assets: \(assets)")
parent.show = false
}
func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
picker.dismiss(animated: true, completion: nil)
parent.show = false
}
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
picker.dismiss(animated: true, completion: nil)
parent.show = false
}
}
}
画像を選択したときに完了アクションを取得できない理由がわかりません。
iOS 13 のサポートが必要なため、この方法でライブラリを統合しています。