我試圖讓用戶選擇照片(最多 3 張)為我的約會應用程式顯示,類似于 tinder。選擇一張影像后會出現問題,該影像顯示在三個添加按鈕顯示幕上,而不是僅顯示一個。
來自 Tinder 應用程式的示例
我的應用程式顯示的內容
@State private var personImage: UIImage?
@State private var isShowingPhotoPicker = false
var body: some View {
VStack {
HStack {
ForEach(0..<3) { personImage in
Button {
isShowingPhotoPicker.toggle()
} label: {
if let personImage = self.personImage
Image(uiImage: personImage)
.resizable()
} else {
Image(systemName: "plus.app.fill")
.font(.system(size: 64))
}
}
}
}
}
}
.fullScreenCover(isPresented: $isShowingPhotoPicker, onDismiss: nil) {
PhotoPicker(personImage: $personImage)
}
這是PhotoPicker():
struct PhotoPicker: UIViewControllerRepresentable {
@Binding var personImage: UIImage?
func makeUIViewController(context: Context) -> UIImagePickerController {
let picker = UIImagePickerController()
picker.delegate = context.coordinator
picker.allowsEditing = true
return picker
}
func updateUIViewController(_ uiViewController: UIImagePickerController, context: Context) { }
func makeCoordinator() -> Coordinator {
return Coordinator(photoPicker: self)
}
final class Coordinator: NSObject, UINavigationControllerDelegate, UIImagePickerControllerDelegate {
let photoPicker: PhotoPicker
init(photoPicker: PhotoPicker) {
self.photoPicker = photoPicker
}
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
if let image = info[.editedImage] as? UIImage {
guard let data = image.jpegData(compressionQuality: 0.2), let compressedImage = UIImage(data: data) else {
// return an error show an alert
return
}
photoPicker.personImage = compressedImage
} else {
// return an error show an alert
}
picker.dismiss(animated: true)
}
}
}
uj5u.com熱心網友回復:
Stack 上的另一個問題解決了這個問題!只需對 進行一些調整PhotoPicker并添加一個enum.
絕對會推薦將這個很棒的資源添加到書簽中,以幫助您在將來克服這個錯誤。
如何在 SwiftUI 中對 Imagepicker 進行兩次單獨呼叫?
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/436527.html
