Почему мой пользовательский переход не работает с моим навигационным контроллером? - PullRequest
0 голосов
/ 12 сентября 2018

Я использую шаблон координатора в своем коде для перехода от RootNavigationController к SplashScreenViewController

class AppCoordinator {
    let window: UIWindow
    let rootViewController: RootNavigationController

    init(window: UIWindow) {
        self.window = window
        rootViewController = RootNavigationController()
        let splashScreenViewController = SplashScreenViewController()

rootViewController.pushViewController(splashScreenViewController, animated: false)
    }
}
extension AppCoordinator: Coordinator {
    func start() {
        window.rootViewController = rootViewController
        window.makeKeyAndVisible()
    }
}

Я также использую собственный переход для обработки перехода от RootNavigationController к SplashScreenNavigationController.

class FadeInAnimator: NSObject {
var duration: TimeInterval = 1.0
}
extension FadeInAnimator: UIViewControllerAnimatedTransitioning {
    func transitionDuration(using transitionContext: UIViewControllerContextTransitioning?) -> TimeInterval {
    return duration
}

func animateTransition(using transitionContext: UIViewControllerContextTransitioning) {
    let containerView = transitionContext.containerView

guard let toViewController = transitionContext.viewController(forKey: .to) else { return }

containerView.addSubview(toViewController.view)
    toViewController.view.alpha = 0

let durationOfTransition = transitionDuration(using: transitionContext)
    UIView.animate(withDuration: durationOfTransition, delay: 0, options: [.curveEaseIn], animations: {
        toViewController.view.alpha = 1
    }) { (finished) in
        transitionContext.completeTransition(finished)
        }
    }
}

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

Это код в RootNavigationController

class RootNavigationController: UINavigationController {
override func viewDidLoad() {
    super.viewDidLoad()
    delegate = self
    navigationBar.setBackgroundImage(UIImage(), for: .default)
    navigationBar.shadowImage = UIImage()
}
override var preferredStatusBarStyle: UIStatusBarStyle {
    return .lightContent
}
}
extension RootNavigationController: UINavigationControllerDelegate {
func navigationController(_ navigationController: UINavigationController, animationControllerFor operation: UINavigationControllerOperation, from fromVC: UIViewController, to toVC: UIViewController) -> UIViewControllerAnimatedTransitioning? {
    switch operation {
    case .push: return FadeInAnimator()
    case .pop: return nil
    case .none: return nil
    }
}
}

1 Ответ

0 голосов
/ 12 сентября 2018

Снять открывающую и закрывающую скобку

UIView.animate(withDuration: durationOfTransition, delay: 0, options: .curveEaseIn, animations: 
...