iOS, Swift, イベントレポート, SwiftUI

SwiftUIでUIViewControllerAnimatedTransitioningは使える?

WWDC3日目、SwiftUIのLabにて聞いたことをメモします。

以前私は「ハーフモーダルで理解するFluid Interfece」という技術同人誌を執筆しました。
そのサンプルアプリとしてUIViewControllerAnimatedTransitioningを使ったカスタムトランジションをするアプリを作成しました。

今回SwiftUIが登場して、カスタムトランジションができるかどうかが気になったのでLabで聞きました。

組み込みのトランジションはある

まず、SwiftUIには組み込みのトランジションがあります。
それを使えば画面遷移は実現できるそうです。
こんな感じ。

body {
    VStack{
        if isPresent {
            MyView().transition(...)
        }
        ...
        Button(action: {
            withAnimation{
                isPresent.toggle()
            }
        }
    }
}

今までもStoryboardのSegue設定でshowとpresentの設定が出来たので、SwiftUIで画面遷移できるのは納得できる話です。

UIViewControllerAnimatedTransitioningは独自に実装

では独自実装で画面遷移をしたい場合はどうでしょう?
Labの方にお聞きしたところ、SwiftUIだけでは実現出来ないそうです。
Swiftコードで書かれているのでいけるとおもったのですが残念です。
SwiftUIのViewはUIHostingController(rootView:)メソッドを使ってUIViewControllerになるのでそれを使えばいいとのこと。

let presentVC = UIHostingController(rootView: LandmarkList())
let nextVC =  UIHostingController(rootView:LandmarkList())
presentVC.delegate = delegate as! UINavigationControllerDelegate
presentVC.show(nextVC, sender: nil)

こういう細かい動作はハマりやすいので直接相談できてよかったです。
参考になれば幸いです。

Author image

About Sato Takeshi

  • Tokyo, Japan