【发布时间】:2021-04-12 19:35:04
【问题描述】:
我有一个.onTapGesture 修饰符,当点击它时会显示一个ImagePicker,然后立即将其关闭。
@State private var updateInfo = false
var body: some View {
HStack {
placeholder.image
.resizable()
.aspectRatio(contentMode: .fill)
.font(.system(size: 16, weight: .medium))
.frame(width: 100, height: 100)
.clipShape(Circle())
.shadow(color: Color.black.opacity(0.1), radius: 1, x: 0, y: 1)
.onTapGesture {
updateInfo.showImagePicker = true
}
.sheet(isPresented: $updateInfo.showImagePicker) {
ImagePicker(showImagePicker: $updateInfo.showImagePicker, pickedImage: $updateInfo.image, imageData: $updateInfo.imageData)
}
}
}
这是我的 ImagePicker
import SwiftUI
struct ImagePicker: UIViewControllerRepresentable {
@Binding var showImagePicker: Bool
@Binding var pickedImage: Image
@Binding var imageData: Data
func makeUIViewController(context: UIViewControllerRepresentableContext<ImagePicker>) -> UIImagePickerController {
let imagePicker = UIImagePickerController()
imagePicker.delegate = context.coordinator
return imagePicker
}
func updateUIViewController(_ uiViewController: UIImagePickerController, context: Context) {
return
}
func makeCoordinator() -> Coordinator {
Coordinator(self)
}
class Coordinator: NSObject, UIImagePickerControllerDelegate, UINavigationControllerDelegate {
var parentImagePicker: ImagePicker
init(_ imagePicker: ImagePicker) {
self.parentImagePicker = imagePicker
}
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
let uiImage = info[UIImagePickerController.InfoKey.originalImage] as! UIImage
parentImagePicker.pickedImage = Image(uiImage: uiImage)
if let mediaImage = uiImage.jpegData(compressionQuality: 0.5) {
parentImagePicker.imageData = mediaImage
}
parentImagePicker.showImagePicker = false
}
func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
parentImagePicker.showImagePicker = false
}
}
}
我在控制台中不断收到此错误:<_uiimagepickerplaceholderviewcontroller:>
对开始/结束外观转换的不平衡调用不确定我在哪里转换不正确。我有一个带有三个选项卡的选项卡栏视图。最后一个选项卡有一个导航栏项,用于推送详细信息updateInfo 视图。
我点击占位符图像,系统会在立即关闭之前显示图像选择器控制器(有点)。我再次点击它,图像选择器控制器出现。
思考为什么它第一次被解雇?
【问题讨论】:
-
这是 SwiftUI 内部结构,如果您的应用行为不受影响,请忽略它。
-
@Asperi 这是糟糕的用户体验。当您转换到
updateInfo视图时,您的当前信息会预填充在文本字段中。当您点击占位符图像以更新您的照片时,图像选择器会关闭并重置字段,从而有效地擦除它们。 -
@Asperi 它想重新开始,但代价是让用户重新输入他们不想更新的值。
-
需要可重现的示例,前提是代码快照没有任何文本字段。
-
这与文本字段无关。事实上,当我点击图片时,选择器会关闭,需要点击两次才能选择图片。
标签: swiftui uiimage uiimagepickercontroller uiviewcontrollerrepresentable