SwiftUI withAnimation 完了コールバック 質問する

SwiftUI withAnimation 完了コールバック 質問する

いくつかの状態に基づいた SwiftUI アニメーションがあります:

withAnimation(.linear(duration: 0.1)) {
    self.someState = newState
}

上記のアニメーションが完了したときにトリガーされるコールバックはありますか?

SwiftUI で完了ブロックを使用してアニメーションを実現する方法についての提案があればwithAnimation、それも歓迎します。

アニメーションがいつ完了するかを知りたいので、他の操作を実行できます。この例では、アニメーションが完了したらコンソールに出力したいだけです。

ベストアンサー1

iOS 17以降

iOS 17 以降では、完了パラメータを使用できます。

withAnimation(.linear(duration: 0.1)) {
    self.someState = newState
} completion: {
    print("Animation finished")
}

iOS 13以降

以前の iOS バージョンでは、この問題に対する適切な解決策はありません。

ただし、 の継続時間を指定できる場合は、 を使用して、アニメーションが終了したときに正確にアクションをトリガーAnimationできます。DispatchQueue.main.asyncAfter

withAnimation(.linear(duration: 0.1)) {
    self.someState = newState
}

DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) {
    print("Animation finished")
}

おすすめ記事