SwiftUI:无法向下拖动以关闭 UIImagePickerController [英] SwiftUI: can't drag-down to dismiss UIImagePickerController

查看:64
本文介绍了SwiftUI:无法向下拖动以关闭 UIImagePickerController的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用以下代码段来显示默认的 UIImagePickerController,但似乎 iOS 13 的下拉关闭手势不是'使用 UIImagePickerController 包裹在 SwiftUI 视图中,用户仍然可以点击默认的 Cancel 标签栏项以关闭选择器,代码:

I'm using the following piece of code to show the default UIImagePickerController, but it seems that the the iOS 13's drag-down to dismiss gesture isn't working with UIImagePickerController wrapped in a SwiftUI view, the user still can hit the default Cancel tab bar item in order to dismiss the picker, the code:

struct ContentView: View {
    @State private var showModal = false
    var body: some View {
        Text("Tap To show modal")
        .padding()
            .onTapGesture {
                self.showModal.toggle()
        }
        .sheet(isPresented: $showModal) {
            SomeUIKitView()
        }
    }
}

final class SomeUIKitViewControllerWrapper: UIViewControllerRepresentable {
    typealias UIViewControllerType = UIImagePickerController

    func makeUIViewController(context: Context) -> UIImagePickerController {
        let imagePicker = UIImagePickerController()
        imagePicker.sourceType = UIImagePickerController.SourceType.photoLibrary
        return imagePicker
    }
    func updateUIViewController(_ uiViewController: UIImagePickerController, context: Context) {}
}

struct SomeUIKitView: View {
    var body: some View {
        SomeUIKitViewControllerWrapper()
    }
}

推荐答案

您可以在 SwiftUI 中构建自己的下拉菜单.在您的情况下,您可以尝试为您的 SomeUIKitView() 视图实现它.

You can build your own drag down in SwiftUI. In your case you could try to implement it for your SomeUIKitView() view.

import SwiftUI

struct SwiftUIDragDown: View {
  @State private var dragDownTreshhold: CGFloat = 50
  @State private var draggedDistance: CGFloat = 0
  @State private var dragDownOffsetY: CGFloat = 0


  var body: some View {
    Text("Drag me")
      .offset(x: 0, y: dragDownOffsetY + draggedDistance)
      .animation(.easeInOut(duration: 0.3))
      .gesture(
        DragGesture(minimumDistance: 10)
          .onChanged { value in
            print("dragged by" , value.translation.height)
            self.draggedDistance = value.translation.height
        }
        .onEnded { _ in
          if self.draggedDistance > self.dragDownTreshhold {
            self.dragDownOffsetY = 600
          } else {
            self.draggedDistance = 0
            self.dragDownOffsetY = 0
          }
        }
    )
  }
}

struct SwiftUIDragDown_Previews: PreviewProvider {
  static var previews: some View {
    SwiftUIDragDown()
  }
}

这篇关于SwiftUI:无法向下拖动以关闭 UIImagePickerController的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆