【问题标题】:SwiftUI: can't drag-down to dismiss UIImagePickerControllerSwiftUI:无法向下拖动以关闭 UIImagePickerController
【发布时间】:2020-03-02 08:46:58
【问题描述】:

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

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()
    }
}

【问题讨论】:

标签: ios swift swiftui


【解决方案1】:

您可以在 SwiftUI 中构建自己的拖拽。在您的情况下,您可以尝试为您的 SomeUIKitView() 视图实现它。

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()
  }
}

【讨论】:

    猜你喜欢
    • 2022-08-10
    • 1970-01-01
    • 1970-01-01
    • 2019-10-25
    • 1970-01-01
    • 2020-07-06
    • 2015-05-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多