我在 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
}
}
}
也许我应该使用呈现方法?