Swift-UI にて、一定時間を待ち別画面に自動遷移する方法が、他記事に見つからなかったのでその覚え書きです。Xcode 14.2 です。
スプラッシュ(起動画面)中に特に時間がかかる初期化処理もなく、一瞬しかスプラッシュが見せれない。スプラッシュにはお客さんが作成したロゴとキャラクタを表示するのでこのままではまずい。しかしSwiftの画面遷移は自由度がないといったシチュエーションです。
更にスプラッシュにBackされては困ります。iOSではBackボタンがなくても、スワイプ操作でBackできてしまいます。
ます view の画面定義内でif文で分岐するという他言語では異常すぎるコードを書きます( 下図中※1 )。if文には任意のstate変数を定義して参照します。( 下図中※2 )
import SwiftUI
import Foundation
struct カレントtView: View {
@State private var isActiveNextView = false // 次画面遷移有無 ※2
var body: some View {
/* 次画面へ遷移する場合 ※1 */
if isActiveNextView == true {
次のView() // Memo: 次Viewを直callするとBack無効にできる ※1
}
/* カレント画面の場合 */
else {
VStack {
:
カレント画面の定義
:
あとはvew表示イベントに待ち時間でTimerを仕掛けて( 下図中※3 )、その時間経過後、state変数値を変更します。( 下図中※4 )
private var splashTimer: Timer! // 起動待ちtimer ※3
:
中略
:
VStack {
:
カレント画面の定義
:
}
.onAppear {
Timer.scheduledTimer(withTimeInterval:5.0, repeats: false){ _ in // ※3
isActiveNextView = true // 次画面に遷移 ※4
}
}
}
}
違和感ありありですが仕方ないです。
なおコード表示には、Code Block Pro を使用させていただいたいてます。