SwiftUI: невозможно перетащить вниз, чтобы закрыть UIImagePickerController - PullRequest
3 голосов
/ 02 марта 2020

Я использую следующий фрагмент кода, чтобы показать значение по умолчанию UIImagePickerController, но кажется, что перетаскивание жеста iOS 13 для отклонения не работает с UIImagePickerController, заключенным в SwiftUI вид, пользователь по-прежнему может нажать элемент панели вкладок 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()
    }
}

enter image description here

1 Ответ

1 голос
/ 02 марта 2020

Вы можете создать свое собственное перетаскивание в 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()
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...