wake-ios/wake/View/Components/Upload/ImagePicker.swift
2025-08-22 18:58:08 +08:00

59 lines
1.9 KiB
Swift

import SwiftUI
import PhotosUI
struct ImagePicker: UIViewControllerRepresentable {
@Binding var images: [UIImage]
var selectionLimit: Int
var onDismiss: (() -> Void)?
func makeUIViewController(context: Context) -> PHPickerViewController {
var configuration = PHPickerConfiguration(photoLibrary: PHPhotoLibrary.shared())
configuration.filter = .images
configuration.selectionLimit = selectionLimit
let picker = PHPickerViewController(configuration: configuration)
picker.delegate = context.coordinator
return picker
}
func updateUIViewController(_ uiViewController: PHPickerViewController, context: Context) {}
func makeCoordinator() -> Coordinator {
Coordinator(self)
}
class Coordinator: NSObject, PHPickerViewControllerDelegate {
let parent: ImagePicker
init(_ parent: ImagePicker) {
self.parent = parent
}
func picker(_ picker: PHPickerViewController, didFinishPicking results: [PHPickerResult]) {
let group = DispatchGroup()
var newImages: [UIImage] = []
for result in results {
group.enter()
if result.itemProvider.canLoadObject(ofClass: UIImage.self) {
result.itemProvider.loadObject(ofClass: UIImage.self) { (image, error) in
if let image = image as? UIImage {
newImages.append(image)
}
group.leave()
}
} else {
group.leave()
}
}
group.notify(queue: .main) {
self.parent.images = newImages
self.parent.onDismiss?()
picker.dismiss(animated: true)
}
}
}
}