AC/Bounce
Jump to navigation
Jump to search
起動時のスプラッシュ画面が欲しくて追加してみた。
下記、コードのBounceが、コードが複雑にならず簡単に使えそうなので流用させてもらった。
SwiftUI Text Animation Library
説明
スプラッシュ画面で、アニメーションさせた後に、ホーム画面のViewを起動する。
- L.2
- @Stateを使用し、アニメーションの終了判定のためのフラグを監視させる。
- L.4
- isLoading でアニメーション表示判定。
- L.10~21
- VStackを使用し、ロゴの下にBounce View のアニメーションを配置。0.5秒ずつずらして、3つアニメーションを動かす。.padding使って上方向に30px余白追加。
- L.23~27
- もっとスマートな方法がある気がするが、アニメーションを指定秒表示させるため、View表示開始時に .onAppearで、非同期タスク起動させ 指定秒遅らせて、その後isLoadingをtoggleさせることで、アニメーション表示を抜けるようにした。
- L.29~33
- アニメーション処理終了後にホーム画面を呼び出す。EnrionmentObjectでデータ共有するためにUserData()オブジェクトをを初期化して、EnvrironmentObjectでContentViewに渡す。
struct Bounce: View {
@State private var isLoading = true
var body: some View {
if isLoading {
ZStack {
Color.white
.opacity(0.9)
.ignoresSafeArea()
VStack {
Image("LaunchScreen")
.resizable()
.aspectRatio(contentMode: .fit)
.padding()
BounceAnimationView(text: "仮想通貨", startTime: 0.0, color: Color.black)
BounceAnimationView(text: "貴金属", startTime: 0.5, color: Color.black)
.padding(.top, 30)
BounceAnimationView(text: "外貨資産", startTime: 1.0, color: Color.black)
.padding(.top, 30)
}
}
.onAppear {
DispatchQueue.main.asyncAfter(deadline: .now() + 2.2) {
isLoading = false
}
}
} else {
ContentView()
.environmentObject(UserData())
}
}
}