branch10480’s blog

Topics that I've learned.

【iOS】window.rootViewController入れ替え時のアニメーション

重要な点は、UIView.transitionanimationsでViewControllerの入れ替えをするのではなく、先に入れ替え処理を書いてからUIView.transitionを呼び出すこと。(animations引数は空のクロージャ。)

class AppDelegate: UIResponder, UIApplicationDelegate {
    var window: UIWindow?

    ...
    
    func setRootViewController(_ vc: UIViewController) {
        guard let window = window else {
            return
        }
        window.rootViewController = vc
        UIView.transition(
            with: window,
            duration: 0.5,
            options: .transitionFlipFromLeft,
            animations: {},
            completion: { _ in })
    }

}

こんな感じでアニメーションさせられます。

f:id:branch10480:20210418202325g:plain:w320

アニメーションの種類は他にもあるので .transitionFlipFromLeft に定義ジャンプして確認してみてください。

ページ送りやフェードのアニメーションもできます。

参考

Swap rootViewController with animation?