0

我在 2 个视图控制器之间有一个 segue。

对于解除自定义交互式过渡效果很好,但是当我执行 segue 时,它​​会立即启动,因此我无法与执行过渡进行交互。我调试了进度,它只显示 0.0 然后 segue 执行动画

这是一些交互控制器代码:

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

也许我应该使用呈现方法?

4

1 回答 1

0

解决了!这是错误的动画师呈现

于 2020-06-18T10:05:43.963 回答