我需要使用SwiftUI在我的应用程序中打开ImagePicker,我该怎么做?
我考虑过使用UIImagePickerController,但是我不知道如何在SwiftUI中做到这一点。
Xcode 11.4的清理版本可以通过SPM作为Swift软件包获得:
https://github.com/ralfebert/ImagePickerView
资源:
import SwiftUI public struct ImagePickerView: UIViewControllerRepresentable { private let sourceType: UIImagePickerController.SourceType private let onImagePicked: (UIImage) -> Void @Environment(\.presentationMode) private var presentationMode public init(sourceType: UIImagePickerController.SourceType, onImagePicked: @escaping (UIImage) -> Void) { self.sourceType = sourceType self.onImagePicked = onImagePicked } public func makeUIViewController(context: Context) -> UIImagePickerController { let picker = UIImagePickerController() picker.sourceType = self.sourceType picker.delegate = context.coordinator return picker } public func updateUIViewController(_ uiViewController: UIImagePickerController, context: Context) {} public func makeCoordinator() -> Coordinator { Coordinator( onDismiss: { self.presentationMode.wrappedValue.dismiss() }, onImagePicked: self.onImagePicked ) } final public class Coordinator: NSObject, UINavigationControllerDelegate, UIImagePickerControllerDelegate { private let onDismiss: () -> Void private let onImagePicked: (UIImage) -> Void init(onDismiss: @escaping () -> Void, onImagePicked: @escaping (UIImage) -> Void) { self.onDismiss = onDismiss self.onImagePicked = onImagePicked } public func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey: Any]) { if let image = info[.originalImage] as? UIImage { self.onImagePicked(image) } self.onDismiss() } public func imagePickerControllerDidCancel(_: UIImagePickerController) { self.onDismiss() } } }