从 SwiftUI 调用 PHPhotoLibrary 的 presentLimitedLibraryPicker 方法的正确方法是什么?
该方法需要一个 UIViewController,而我在 SwiftUI 中没有。
我尝试使用 UIViewControllerRepresentable 来创建 UIViewController,它可以工作,但结果是出现了两个视图控制器,一个是我使用 UIViewControllerRepresentable 创建的,一个是有限库选择器。
两个视图控制器都需要关闭才能到达原始屏幕,这是不可取的。
总结一下我看到的问题:
- presentLimitedLibraryPicker 通过传递 ViewController 来工作。
- 这让我创建并呈现了一个虚拟 ViewController,这样我就可以调用该方法。
- 无法获得对有限库选择器的引用,它也不提供委托。所以我无法检测到 Limited Library Picker 控制器何时被解除。
这是我的尝试(它显示了选择器,但是当您关闭它时,您也需要关闭额外的虚拟视图控制器:
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) {
}
}