如何在SwiftUI中打开ImagePicker?

我需要使用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()

}

}

}

以上是 如何在SwiftUI中打开ImagePicker? 的全部内容, 来源链接: utcz.com/qa/418708.html

回到顶部