スプラッシュスクリーン作り2日目。

前回は静止画のスプラッシュスクリーンを作りましたので、今回は動くスプラッシュスクリーン作りに挑戦です。

ニャンコ先生「公式の方は静止画を推している雰囲気が漂っていた気がするニャ」

そうなんですよねえ……。

よく考えてみると、そもそもアプリの「起動処理中」という『とっても忙しいタイミング』に、わざわざビューを描画した上でさらにアニメーションまで動かしたいなんて、本末転倒な気もするのです。

「静止画の表示でお茶を濁しておきなさいよ。たった数秒なんだから。」

という、SwiftUIからの声が聞こえてきます。

でもまあ、やるだけやってみましょう。

Google先生にお伺いを立てて、なるべくシンプルな解決方法を探してみたところ、「ビューの切り替え法」を解説してくれている方がいました。

STEP1 スプラッシュスクリーンに該当するビューを用意する
STEP2 そのビューの中に、数秒分のアニメーションを仕込む
STEP3 一定時間後に、メインのコンテンツビューに表示を切り替えるコードを仕込む
STEP4 アプリ起動時に表示するビューを、スプラッシュスクリーンビューに変更する

こんな感じ。なるほど、シンプルに「疑似スプラッシュスクリーン」をビューで作るイメージですね。わかりやすい。

とりあえず、カンタンなアニメーションをするビューを作ってみました。

そのビューの最初に、ひとつフラグを用意します。アプリ起動時にそのフラグをチェックして、「そのままスプラッシュスクリーンを読み込むか」「コンテンツビューを読み込むか」を判断させる、というIF分岐を組み込みます。

「はて。このIF文、ループさせてないけど、どうやって状態を監視するんだろう……?」と思っていたのですが、そこは「@State」の出番です。

変数宣言時にコイツを付けておくと、値が変更された時に、この変数を参照しているViewが自動的に再描画されるようです。なるほど〜、そういうことでしたか。今までまったく理解せずに使っていました。

ということで、アニメーションが動いた頃合いを見計らって、処理の中でフラグを更新してみたところ、ビューが切り替わってメインコンテンツが表示されました。バッチリ!

動くことは確認できましたので、もう少し凝ったことをしてみたい……ところではあるのですが……やっぱりなんだかとーってもダメなことをしている気がしてなりません。うーむ。

このまま進めていく前に、もう少しだけ静止画の方のスプラッシュスクリーンとの棲み分けを考えてみることにしましょう。


Apple Developer Documentation
Structure > State
A property wrapper type that can read and write a value managed by SwiftUI.
外部リンクを開く