Как включить анимацию перехода панели вкладок для работы без начального контроллера представления - PullRequest
0 голосов
/ 06 июня 2019

По существу у меня есть следующая пользовательская анимация перехода для контроллера панели вкладок:

MyFadeTransition.swift

import UIKit

class MyFadeTransition: NSObject, UIViewControllerAnimatedTransitioning {
    func animateTransition(using transitionContext: UIViewControllerContextTransitioning) {
        if let fromVC = transitionContext.viewController(forKey: .from), let toVC = transitionContext.viewController(forKey: .to) {
            toVC.view.frame = fromVC.view.frame
            toVC.view.alpha = 0
            fromVC.view.alpha = 1
            transitionContext.containerView.addSubview(fromVC.view)
            transitionContext.containerView.addSubview(toVC.view)

            UIView.animate(withDuration: transitionDuration(using: transitionContext), animations: {
                toVC.view.alpha = 1
            }) { (finished) in
                transitionContext.completeTransition(finished)
            }
        }
    }

    func animationEnded(_ transitionCompleted: Bool) {
        // no-op
    }

    func transitionDuration(using transitionContext: UIViewControllerContextTransitioning?) -> TimeInterval {
        return 0.12
    }
}

Проблема в том, что код также требует, чтобы контроллер панели вкладок был начальным контроллером представления во время запуска, а код ниже в AppDelegate

let tab = window!.rootViewController as! UITabBarController
tab.delegate = self

Следующее также должно быть добавлено к AppDelegate.swift

extension AppDelegate: UITabBarControllerDelegate {
    func tabBarController(_ tabBarController: UITabBarController, animationControllerForTransitionFrom fromVC: UIViewController, to toVC: UIViewController) -> UIViewControllerAnimatedTransitioning? {
        let fade = MyFadeTransition()

        return fade
    }
}

Я использую другой ViewController в качестве начального ViewController, как я могу заставить код продолжать работать, не имея его в качестве начального контроллера?

1 Ответ

0 голосов
/ 06 июня 2019

Вам необходимо создать подкласс UITabBarController и использовать

class CustomTab:UITabBarController,UITabBarControllerDelegate { 
   override func viewDidLoad() {
      super.viewDidLoad()
      self.delegate = self
   }
   func tabBarController(_ tabBarController: UITabBarController, animationControllerForTransitionFrom fromVC: UIViewController, to toVC: UIViewController) -> UIViewControllerAnimatedTransitioning? { 
      return MyFadeTransition()
   }
}

Затем назначить CustomTab в качестве имени класса для tabBar в IB

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...