iOS 15でSwiftUIビューを定期的にリロードします
iOS 15のSwiftUI 3では、新しいビュー構造TimeLineView
があります。このビュータイプを使って、(あなたが定義した)一定期間ごとにビューをリロードすることができます。
例えば、アニメーションのロード画面を作ることができます。
実装
public init(_ schedule: Schedule, @ViewBuilder content: @escaping (TimelineView<Schedule, Content>.Context) -> Content)
コードクロージャに渡された変数Context
があります。この変数を使って、ビューがリロードされた時間にアクセスすることができます。
import SwiftUI
struct ContentView: View {
var body: some View {
TimelineView(.periodic(from: Date(), by: 1)) { context in
Text("\(context.date)")
}
}
}
アニメーション付きローディング画面の作成
1秒ごとに画面をリロードできるため、日付から現在の秒の値を読み取り、その値を使用して別の画面を表示することができます。
0、1、2を繰り返すシーケンス番号を生成することができ、その値を使用して別の画面を表示することができます。
let sequenceNo = Calendar.current.component(.second, from: context.date) % 3
struct ContentView: View {
var body: some View {
Form {
TimelineView(.periodic(from: Date(), by: 1)) { context in
// A number that's in range 0, 1, 2
let sequenceNo = Calendar.current.component(.second, from: context.date) % 3
HStack {
Image(systemName: "gamecontroller")
.font(.largeTitle)
Image(systemName: "chevron.right")
.font(.largeTitle)
.foregroundColor((sequenceNo >= 0) ? .green : .init(UIColor.label))
Image(systemName: "chevron.right")
.font(.largeTitle)
.foregroundColor((sequenceNo >= 1) ? .green : .init(UIColor.label))
Image(systemName: "chevron.right")
.font(.largeTitle)
.foregroundColor((sequenceNo >= 2) ? .green : .init(UIColor.label))
Image(systemName: "network")
.font(.largeTitle)
.symbolRenderingMode(.multicolor)
}
}
Text("Connecting your console to the Internet...")
}
}
}
関連記事
SwiftUIのビューは自動的に再描画され、通常は特定の関数をコールして再読み込みさせることはできません。どの変数を監視させるかをSwiftUIのビューに知らせるには、次の変数型を使用できます。
変数が変更されたときにSwiftUIのViewがリロードされるようにする
Author And Source
この問題について(iOS 15でSwiftUIビューを定期的にリロードします), 我々は、より多くの情報をここで見つけました https://qiita.com/MaShunzhe/items/3b34f8912efaae582074著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .