SwiftUI から PHPhotoLibrary の presentLimitedLibraryPicker メソッドを呼び出す正しい方法は何でしょうか?
このメソッドには、SwiftUI にはない UIViewController が必要です。
UIViewController を作成するために UIViewControllerRepresentable を使用しようとしましたが、動作しますが、結果として、UIViewControllerRepresentable で作成したビュー コントローラーと、制限付きライブラリ ピッカーの 2 つのビュー コントローラーが表示されます。
元の画面に戻るには、両方の View Controller を閉じる必要がありますが、これは望ましくありません。
私が見る問題を要約すると:
- presentLimitedLibraryPicker は、ViewController を渡すことによって機能します。
- これにより、メソッドを呼び出すことができるように、ダミーの ViewController を作成して提示することができます。
- Limited Library Picker への参照を取得する方法はありません。また、デリゲートも提供されません。そのため、制限付きライブラリ ピッカー コントローラーがいつ閉じられたかを検出できません。
これは私の試みです(ピッカーが表示されますが、それを閉じると、余分なダミーのView Controllerも閉じる必要があります:
import Foundation
import SwiftUI
import Photos
import PhotosUI
struct TestView: View {
@State var showLibraryPicker = false
var body: some View {
NavigationView {
VStack {
Button("Open Library Picker") { showLibraryPicker = true }
}
.navigationBarTitle("Test", displayMode: .inline)
.navigationViewStyle(StackNavigationViewStyle())
.sheet(isPresented: $showLibraryPicker, onDismiss: { print("Dismissed") }) {
TestLimitedLibraryPicker()
}
}
}
}
struct TestLimitedLibraryPicker: UIViewControllerRepresentable {
func makeUIViewController(context: Context) -> UIViewController {
let controller = UIViewController()
PHPhotoLibrary.shared().presentLimitedLibraryPicker(from: controller)
return controller
}
func updateUIViewController(_ uiViewController: UIViewController, context: Context) {
}
}