У меня есть переход между двумя контроллерами представления.
Отмена настраиваемого интерактивного перехода работает нормально, но когда я выполняю переход, он запускается мгновенно, поэтому я не могу взаимодействовать с выполнением перехода. Я отладил прогресс, и он показывает только 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
}
}
}
Может быть, мне использовать метод представления?