【问题标题】:SwiftUI - Unbalanced Calls To Begin/End Appearance Transitions ForSwiftUI - 开始/结束外观转换的不平衡调用
【发布时间】: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


【解决方案1】:

不完全是解决方案的解决方案

我试图在视图上调用 ImagePickerController 并不断收到不平衡视图错误。所以我创建了一个完全不同的视图来选择一个新图像。错误尚未解决,但我的问题已解决。

【讨论】:

    猜你喜欢
    • 2016-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-11
    • 1970-01-01
    • 2016-05-28
    相关资源
    最近更新 更多