LoginSignup
2
3

More than 3 years have passed since last update.

はじめてSwiftUIでMacアプリを作って画面遷移に困った話

Posted at

はじめに

今までiPhoneアプリケーションの経験しかなく、Macアプリを作成したことはありませんでした。
最初からMacアプリを作ってみるとiPhoneとの違いに少し驚いた話です。
SwiftUIについても初心者なので勉強中です。

ちなみに環境は以下
Xcode:11.7
Swift5

ログイン画面からメイン画面に遷移したい

Appleのチュートリアルやったときに画面遷移なかったなとは思ったのですが、
iPhoneのようにNavigationViewでは遷移しません。
チュートリアルにもありますがNavigationViewでは1画面にリスト画面と詳細画面が並べられることになります。

私はログイン画面でログインした後メイン画面に移動する処理がうまく書けず困ったので
画面遷移についてメモを残します。

ZStackを使う方法

ZStackを使って、Viewを切り替えるように実装しました。

ZStack
    var body: some View {
        ZStack {
            // メイン画面を表示
            MainView()
            // 上からログイン画面を表示
            if !isLogin {
                LoginView()
            } 
        }
    }

メイン画面の上からログイン画面が出てきた方がMacアプリっぽいかなと思ったのですが、
ifelseにして丸ごと切り替えても良かったかもしれません。

sheetを使う方法

メイン画面の上からログイン画面を出すならsheetも良かったです。
macOSBigSureだととても綺麗に見えます。
macOS Catalinaだと上からピロっと出る感じであんまりおすすめできませんでした。

sheet
    var body: some View {
        VStack {
            // メイン画面を表示
            MainView()
        }.sheet(isPresented: $isLogin, content: {
            LoginView()
        })
    }

感想

sheetは画面外をクリックされると閉じてしまうのでログインには向きませんね!
sheetと同じようなものに.alertもありますがこちらは「Alert」型でないといけないので画面を切り替えるには使えません。
またsheetとalertを多用すると画面遷移時にぶつかって?しまいどちらかが表示されない場合もありました。
なにもなければZStackで切り替えるのが一番シンプルだなと思います。

スマートな画面遷移方法があればぜひ教えてください!

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3