1. ホーム
  2. swift

[解決済み] rootViewControllerとアニメーションを入れ替える?

2023-04-05 14:51:08

質問

タブバーを持つ別のルートビューコントローラに、アプリデリゲート経由で切り替え、遷移アニメーションを追加したいのですが、どうすればよいでしょうか?デフォルトでは、アニメーションなしでビューを表示するだけです。

let tabBar = self.instantiateViewController(storyBoard: "Main", viewControllerID: "MainTabbar")
let appDelegate = UIApplication.shared.delegate as! AppDelegate
appDelegate.window = UIWindow(frame: UIScreen.main.bounds)
appDelegate.window?.rootViewController = tabBar
appDelegate.window?.makeKeyAndVisible()

こうして別のルートビューコントローラーに入れ替わりました。

どのように解決するのですか?

この場合 UIView.transition(with: view) を置き換えるために rootViewControllerUIWindow :

guard let window = UIApplication.shared.keyWindow else {
    return
}

let storyboard = UIStoryboard(name: "Main", bundle: nil)
let vc = storyboard.instantiateViewController(withIdentifier: "MainTabbar")

// Set the new rootViewController of the window.
// Calling "UIView.transition" below will animate the swap.
window.rootViewController = vc

// A mask of options indicating how you want to perform the animations.
let options: UIView.AnimationOptions = .transitionCrossDissolve

// The duration of the transition animation, measured in seconds.
let duration: TimeInterval = 0.3

// Creates a transition animation.
// Though `animations` is optional, the documentation tells us that it must not be nil. ¯\_(ツ)_/¯
UIView.transition(with: window, duration: duration, options: options, animations: {}, completion:
{ completed in
    // maybe do something on completion here
})