【问题标题】:Swift -Transition to SceneDelegateSwift - 过渡到 SceneDelegate
【发布时间】:2020-02-28 05:57:13
【问题描述】:

在 iOS 13 之前,我会使用转换从我的 LoginVC 转到我的 TabBarController。我将如何为 SceneDelegate 完成以下任务?此应用只有 1 个场景/窗口

@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
}

【问题讨论】:

    标签: ios swift uiscenedelegate


    【解决方案1】:
    @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
        }
    }
    

    【讨论】:

      【解决方案2】:
         @objc func buttonTapped() {
      
               let rootVC = UIStoryboard.init(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "Tabbarrrrr") as! Tabbarrrrr 
               let navigationController = UINavigationController(rootViewController: rootVC)
               UIApplication.shared.windows.first?.rootViewController = navigationController
               UIApplication.shared.windows.first?.makeKeyAndVisible()
      
              }
      

      您可以使用该代码..

      【讨论】:

      • 我不是在寻找委托函数,我想要与我的问题相同的代码,但不是 AppDelegate。一个按钮触发过渡
      • @LanceSamaria 好的,等一下,我会更新我的代码,在您的代码中没有按钮代码,或者您没有告诉代码是用于按钮的。等等
      • 对不起,我添加了它
      • @LanceSamaria 检查我的新编辑,它将设置根视图控制器,但不设置动画,但我正在尝试,请稍候
      • 我想通了,谢谢。顺便说一句,您不应该在 NavigationController 中嵌入 TabBarController,因为它们都是容器控制器。苹果建议不要这样做。您也不必使用 .makeKeyAndVisible() 因为它已经是关键窗口(除非有第二个窗口是关键)
      猜你喜欢
      • 1970-01-01
      • 2018-10-29
      • 2017-08-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多