1

The goal is to animate multiple SCNNodes at the same time then call a completion block once all the animations complete. The parallel animations have the same duration so will complete at the same time if started together.

This SO answer suggested using the group function for Sprite Kit, but there is no analog in Scene Kit because the SCNScene class lacks a runAction.

One option is run all the actions individually against each node and have each one call the same completion function, which must maintain a flag to ensure it's only called once.

Another option is to avoid the completion handler and call the completion code after a delay matched to the animation duration. This creates race conditions during testing, however, since sometimes the animations get held up before completing.

This seems clunky, though. What's the right way to group the animation of multiple nodes in SceneKit then invoke a completion handler?

4

3 に答える 3

1

私はこれを完全に考えていませんが、役に立つことを期待して投稿します。

一般的な問題は、一連のアクションの最後の完了後に何かを行うことであり、GCD の目的dispatch_barrierです。すべてのブロックをプライベート コンカレント キューに送信してから、グランド フィナーレ完了ブロックを で送信しますdispatch_barrier。グランド フィナーレは、前のすべてのブロックが終了した後に実行されます。

すぐにはわかりませんが、これらの GCD 呼び出しを SceneKit 呼び出しおよび完了ハンドラーと統合する方法です。

たぶんdispatch_group、より良いアプローチです。

編集、コメント大歓迎です!

于 2016-08-24T08:35:39.780 に答える