はじめに
今までiPhoneアプリケーションの経験しかなく、Macアプリを作成したことはありませんでした。
最初からMacアプリを作ってみるとiPhoneとの違いに少し驚いた話です。
SwiftUIについても初心者なので勉強中です。
ちなみに環境は以下
Xcode:11.7
Swift5
ログイン画面からメイン画面に遷移したい
Appleのチュートリアルやったときに画面遷移なかったなとは思ったのですが、
iPhoneのようにNavigationViewでは遷移しません。
チュートリアルにもありますがNavigationViewでは1画面にリスト画面と詳細画面が並べられることになります。
私はログイン画面でログインした後メイン画面に移動する処理がうまく書けず困ったので
画面遷移についてメモを残します。
ZStackを使う方法
ZStackを使って、Viewを切り替えるように実装しました。
var body: some View {
ZStack {
// メイン画面を表示
MainView()
// 上からログイン画面を表示
if !isLogin {
LoginView()
}
}
}
メイン画面の上からログイン画面が出てきた方がMacアプリっぽいかなと思ったのですが、
ifelseにして丸ごと切り替えても良かったかもしれません。
sheetを使う方法
メイン画面の上からログイン画面を出すならsheetも良かったです。
macOSBigSureだととても綺麗に見えます。
macOS Catalinaだと上からピロっと出る感じであんまりおすすめできませんでした。
var body: some View {
VStack {
// メイン画面を表示
MainView()
}.sheet(isPresented: $isLogin, content: {
LoginView()
})
}
感想
sheetは画面外をクリックされると閉じてしまうのでログインには向きませんね!
sheetと同じようなものに.alertもありますがこちらは「Alert」型でないといけないので画面を切り替えるには使えません。
またsheetとalertを多用すると画面遷移時にぶつかって?しまいどちらかが表示されない場合もありました。
なにもなければZStackで切り替えるのが一番シンプルだなと思います。
スマートな画面遷移方法があればぜひ教えてください!