Как выполнить интерактивный переход с помощью segue? - PullRequest
0 голосов
/ 18 июня 2020

У меня есть переход между двумя контроллерами представления.

Отмена настраиваемого интерактивного перехода работает нормально, но когда я выполняю переход, он запускается мгновенно, поэтому я не могу взаимодействовать с выполнением перехода. Я отладил прогресс, и он показывает только 0,0, затем segue выполняет анимацию

Вот код InteractionController:

import UIKit

class SlideOutInteractionController: UIPercentDrivenInteractiveTransition {

  var isPresenting = true
  var interactionInProgress = false
  var shouldCompleteTransition = false

  private weak var viewController: UIViewController!
  private weak var gestureView: UIView!

  init(viewController: UIViewController, gestureView: UIView?, isPresenting: Bool) {
    super.init()

    self.isPresenting = isPresenting
    self.viewController = viewController
    if let gestureView = gestureView {
      prepareGestureRecognizer(in: gestureView)
    } else {
      prepareGestureRecognizer(in: viewController.view)
    }
  }

  private func prepareGestureRecognizer(in view: UIView) {
    let gesture = UIPanGestureRecognizer(target: self, action: #selector(handleGesture(_:)))
    view.addGestureRecognizer(gesture)
  }

  @objc func handleGesture(_ gestureRecognizer: UIScreenEdgePanGestureRecognizer) {

    let translation = gestureRecognizer.translation(in: gestureRecognizer.view!.superview)
    let dragAmount =
      isPresenting ? -gestureRecognizer.view!.bounds.size.height : gestureRecognizer.view!.bounds.size.height

    var progress = (translation.y / dragAmount)
    progress = CGFloat(fminf(fmaxf(Float(progress), 0.0), 1.0))

    switch gestureRecognizer.state {

    case .began:

      interactionInProgress = true

      if isPresenting {
        viewController.performSegue(withIdentifier: CardViewController.SegueIdentifier.reveal.rawValue, sender: nil)
      } else {
        viewController.dismiss(animated: true, completion: nil)
      }
    case .changed:
      shouldCompleteTransition = progress > 0.3
      update(progress)

    case .cancelled:
      interactionInProgress = false
      cancel()

    case .ended:
      interactionInProgress = false
      if shouldCompleteTransition {
        finish()
      } else {
        cancel()
      }
    default:
      break
    }
  }
}

Может быть, мне использовать метод представления?

1 Ответ

0 голосов
/ 18 июня 2020

Решено! Не тот аниматор представил

...