Search code examples
iosswiftuiscenedelegate

Swift -Transition to SceneDelegate


Before iOS 13 I would use a transition to go from my LoginVC to my TabBarController. How would I accomplish the following for SceneDelegate? This app has only 1 scene/window

@objc func buttonTapped() {

    let transition = CATransition()
    transition.duration = 0.4
    transition.type = CATransitionType.moveIn
    transition.subtype = CATransitionSubtype.fromTop
    transition.timingFunction = CAMediaTimingFunction(name:CAMediaTimingFunctionName.default)

    let appDelegate = UIApplication.shared.delegate as? AppDelegate
    appDelegate?.window?.rootViewController?.view.removeFromSuperview()
    appDelegate?.window?.rootViewController?.dismiss(animated: false, completion: nil)
    appDelegate?.window?.layer.add(transition, forKey: kCATransition)
    appDelegate?.window?.rootViewController = //instance of my TabBarController() and selected index
    appDelegate?.window?.isHidden = false
}

Solution

  • @objc func buttonTapped() {
    
        let transition = CATransition()
        transition.duration = 0.4
        transition.type = CATransitionType.moveIn
        transition.subtype = CATransitionSubtype.fromTop
        transition.timingFunction = CAMediaTimingFunction(name:CAMediaTimingFunctionName.default)
    
        if #available(iOS 13, *) {
    
            UIApplication.shared.windows.first?.rootViewController?.view.removeFromSuperview()
            UIApplication.shared.windows.first?.rootViewController?.dismiss(animated: false, completion: nil)
            UIApplication.shared.windows.first?.layer.add(transition, forKey: kCATransition)
            UIApplication.shared.windows.first?.rootViewController = // instance of my TabBarController() and selected index
            UIApplication.shared.windows.first?.isHidden = false
    
        } else {
    
            let appDelegate = UIApplication.shared.delegate as? AppDelegate
            appDelegate?.window?.rootViewController?.view.removeFromSuperview()
            appDelegate?.window?.rootViewController?.dismiss(animated: false, completion: nil)
            appDelegate?.window?.layer.add(transition, forKey: kCATransition)
            appDelegate?.window?.rootViewController = //instance of my TabBarController() and selected index
            appDelegate?.window?.isHidden = false
        }
    }