【发布时间】:2021-10-16 19:20:12
【问题描述】:
我正在开发这个项目,用户可以在其中进入设置视图并选择图像(使用 imagepicker)作为个人资料图像。然后将图像上传到 Firebasefirestore,并应在同一屏幕上以圆圈形式显示。图片选择器正常工作,所选图片已正确上传到 firebasefirestore,但所选图片未正确显示在圆圈中。你能帮帮我吗?
这是我的代码的相关部分。如有需要,很乐意分享 imagepicker 的代码。
import SwiftUI
struct SettingsView: View {
@ObservedObject var settingsViewModel = SettingsViewModel()
@Environment(\.presentationMode) var presentationMode: Binding<PresentationMode>
@State private var presented = false
@State private var isShowPhotoLibrary = false
@State private var image = UIImage()
var body: some View {
NavigationView {
VStack {
Image(uiImage:self.image) // <-- here is where I want the image to appear
.resizable()
.aspectRatio(contentMode: .fill)
.frame(width: 250.0, height: 250.0, alignment: .center)
.clipShape(/*@START_MENU_TOKEN@*/Circle()/*@END_MENU_TOKEN@*/)
.overlay(Circle().stroke(Color.white, lineWidth: 4))
.shadow(radius: 10)
.scaledToFit()
Text("Project")
.font(.title)
.fontWeight(.semibold)
Form {
Section {
HStack {
Image(systemName: "checkmark.circle")
Text("Upload profile image")
Spacer()
Text("Plain")
.onTapGesture {
self.isShowPhotoLibrary = true
}
.sheet(isPresented: $isShowPhotoLibrary) {
ImagePicker(sourceType: .photoLibrary, selectedImage: self.$image)
}
}
}
AccountSection(settingsViewModel: self.settingsViewModel)
}
.navigationBarTitle("Settings", displayMode: .inline)
.navigationBarItems(trailing:
Button(action: { self.presentationMode.wrappedValue.dismiss() }) {
Text("Done")
})
}
}
}
}
图像选择器:
import UIKit
import SwiftUI
struct ImagePicker: UIViewControllerRepresentable {
var sourceType: UIImagePickerController.SourceType = .photoLibrary
@Binding var selectedImage: UIImage
@Environment(\.presentationMode) private var presentationMode
func makeUIViewController(context: UIViewControllerRepresentableContext<ImagePicker>) -> UIImagePickerController {
let imagePicker = UIImagePickerController()
imagePicker.allowsEditing = false
imagePicker.sourceType = sourceType
imagePicker.delegate = context.coordinator
return imagePicker
}
func updateUIViewController(_ uiViewController: UIImagePickerController, context: UIViewControllerRepresentableContext<ImagePicker>) {
}
func makeCoordinator() -> Coordinator {
Coordinator(self)
}
final class Coordinator: NSObject, UIImagePickerControllerDelegate, UINavigationControllerDelegate {
var parent: ImagePicker
init(_ parent: ImagePicker) {
self.parent = parent
}
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
if let image = info[UIImagePickerController.InfoKey.originalImage] as? UIImage {
uploadprofileImage(image: image)
}
parent.presentationMode.wrappedValue.dismiss()
}
}
}
【问题讨论】:
-
你能显示
ImagePicker的代码吗? -
刚刚添加...
标签: xcode google-cloud-firestore swiftui uiimagepickercontroller