Dies ist, was zu funktionieren scheint: wenn
private var currentTransitionCoordinator: UIViewControllerTransitionCoordinator?
@objc private func onGesture(sender: UIGestureRecognizer) {
switch sender.state {
case .began, .changed:
if let ct = navigationController?.transitionCoordinator {
currentTransitionCoordinator = ct
}
case .cancelled, .ended:
currentTransitionCoordinator = nil
case .possible, .failed:
break
}
if let currentTransitionCoordinator = currentTransitionCoordinator {
print(currentTransitionCoordinator.percentComplete)
}
}
Nachdem Sie dort gehen lassen keine Möglichkeit, Fortschritte zu bekommen ist. Ich habe versucht, den Koordinator ein wenig länger zu behalten und Werte auf Timer zu drucken, aber ich bekomme sogar einen Crash.
Wie auch immer, ich nehme an, das ist was Sie brauchen.
TEST SZENARIO:
ein neues Projekt erstellen und zum Hauptstoryboard navigieren. Fügen Sie einen Navigationscontroller hinzu und legen Sie den Stammansicht-Controller im Storyboard auf ViewController
fest (entfernen Sie das automatisch generierte Stammverzeichnis).
Dann ViewController.swift gehen und überschreiben Sie mit folgenden:
import UIKit
class ViewController: UIViewController {
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
if let controller = navigationController, controller.viewControllers.count <= 1 { // Present it first time only
view.backgroundColor = UIColor.green
let newController = ViewController()
newController.view.backgroundColor = UIColor.red
navigationController?.interactivePopGestureRecognizer?.addTarget(newController, action: #selector(onGesture))
navigationController?.pushViewController(newController, animated: true)
}
}
private var currentTransitionCoordinator: UIViewControllerTransitionCoordinator?
@objc private func onGesture(sender: UIGestureRecognizer) {
switch sender.state {
case .began, .changed:
if let ct = navigationController?.transitionCoordinator {
currentTransitionCoordinator = ct
}
case .cancelled, .ended:
currentTransitionCoordinator = nil
case .possible, .failed:
break
}
if let currentTransitionCoordinator = currentTransitionCoordinator {
print(currentTransitionCoordinator.percentComplete)
}
}
}
Sie sollten Prozentsatz, wie Sie Ihren Finger ziehen ausgedruckt sehen können, zur Zeit gedrückt View-Controller abgewiesen.
Vielleicht navigationController ?. transitionCoordinator ... –
Das druckt ein Optional (0.0), am Anfang und dann Null nach – Will