3

SwiftUI から PHPhotoLibrary の presentLimitedLibraryPicker メソッドを呼び出す正しい方法は何でしょうか?

このメソッドには、SwiftUI にはない UIViewController が必要です。

UIViewController を作成するために UIViewControllerRepresentable を使用しようとしましたが、動作しますが、結果として、UIViewControllerRepresentable で作成したビュー コントローラーと、制限付きライブラリ ピッカーの 2 つのビュー コントローラーが表示されます。

元の画面に戻るには、両方の View Controller を閉じる必要がありますが、これは望ましくありません。

私が見る問題を要約すると:

  1. presentLimitedLibraryPicker は、ViewController を渡すことによって機能します。
  2. これにより、メソッドを呼び出すことができるように、ダミーの ViewController を作成して提示することができます。
  3. 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) {

     }
}
4

2 に答える 2