Dam*_*zzi 3 uiimagepickercontroller swift swiftui
有没有办法让新的 PhotosPicker 打开相机而不是打开 photoLibrary,我记得在旧的 UIImagePickerController 中,如果使用相机或从图片中选择,用户可以在选择器中选择此选项。
ImagePikerCircular(im: im, dataImage: $dataImage)
.overlay(alignment: .bottomTrailing) {
PhotosPicker(selection: $im.imageSelection,
matching: .images,
photoLibrary: .shared()) {
Image(systemName: "pencil.circle.fill")
.symbolRenderingMode(.multicolor)
.font(.system(size: 30))
.foregroundColor(.accentColor)
}
.buttonStyle(.borderless)
.photosPickerStyle(.presentation)
}
Run Code Online (Sandbox Code Playgroud)
小智 6
不,无法使用 PhotosPicker 打开相机,您需要创建自己的选择对话框,当用户点击相机时,打开旧的 UIImagePickerController,您可以创建一个 UIViewControllerRepresentable,如下所示:
struct CameraPickerView: UIViewControllerRepresentable {
private var sourceType: UIImagePickerController.SourceType = .camera
private let onImagePicked: (UIImage) -> Void
@Environment(\.presentationMode) private var presentationMode
public init(onImagePicked: @escaping (UIImage) -> Void) {
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()
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后,您可以向选择器显示全屏覆盖:
.fullScreenCover(isPresented: $showCameraPicker) {
CameraPickerView() { image in
// Do what you want with your image.
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1327 次 |
| 最近记录: |