## .activeはUIが表示された後からCallされる
Apple WatchのアプリをSwiftUIで作成していて、画面が表示されたタイミングで行いたい処理を記述しようとした時に、Appleのドキュメントを見ながら以下のように実装しました。
```objc
`gutter:true;
@Environment(\.scenePhase) private var scenePhase
var body: some View {
VStack {
Text("Hello!")
}
.onChange(of: scenePhase) { phase in
switch phase {
case .active:
// The app has become active.
break
case .inactive:
// The app has become inactive.
break
case .background:
// The app has moved to the background.
break
@unknown default:
fatalError("The app has entered an unknown state.")
}
}
}
```
ここで、.activeが画面が表示される初回もCallされることを期待するのですが、どうもCallされていない様でした。
Watch上で表示された後は、Callされているのですが、初回も処理を行う様にするには、.onAppearも実装した方が良さそうです。
なので、こちらが良いかも。
```objc
`gutter:true;
@Environment(\.scenePhase) private var scenePhase
var body: some View {
VStack {
Text("Hello!")
}
.onAppear {
// 初回はこちら
}
.onChange(of: scenePhase) { phase in
switch phase {
case .active:
// 画面が表示されてからはこちら
break
case .inactive:
// The app has become inactive.
break
case .background:
// The app has moved to the background.
break
@unknown default:
fatalError("The app has entered an unknown state.")
}
}
}
```
上位のViewで定義したらこの限りではないかもしれません。
調べたいけど、AppleWatchのアプリを実機でデバッグするの1回起動するのに何分もかかるので、しんどすぎてやる気が起きません。
みんなどうしてるのでしょうか。
## 参考URL
- [Handling Common State Transitions](https://developer.apple.com/documentation/watchkit/life_cycles/handling_common_state_transitions)
0 件のコメント :
コメントを投稿