.activeはUIが表示された後からCallされる
Apple WatchのアプリをSwiftUIで作成していて、画面が表示されたタイミングで行いたい処理を記述しようとした時に、Appleのドキュメントを見ながら以下のように実装しました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | @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も実装した方が良さそうです。
なので、こちらが良いかも。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | @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回起動するのに何分もかかるので、しんどすぎてやる気が起きません。
みんなどうしてるのでしょうか。
0 件のコメント :
コメントを投稿