UIDynamicAnimatorを使用して、すばらしい拡張/縮小アニメーションを実現する拡張可能なトレイビューのコードを作成しています。UIGravityBehaviorがアクティブなときにUIDynamicAnimatorが平衡に達することを拒否します。
現実的なアクセラレーションを実現するには、トレイの「タブ」が画面の下部に当たるまで、トレイを落ち着かせるためにUIGravityBehavior
を使用します。
これはうまくいきますが、シーン内のすべてのアイテムの移動が停止しても、UIDynamicAnimatorDelegate dynamicAnimatorDidPause:
は呼び出されません。つまり、アニメータはCPUサイクルを使用してシーンをアニメーション化し続けます(デリゲートが設定され、UIDynamicAnimatorDelegate dynamicAnimatorDidPause:
のために起動します)。
シーンからUIGravityBehavior
を取り除こうとしましたが、実際にアニメーターが最後に停止する原因となりました。私はすべての動きが止まったら、私はシーンからそれを削除する必要があるので、私は重力の動作の除去をすぐに時間を取ることができません。
重力は一定の力であると理解していますが、すべての速度と加速度が0になると、まだアニメーターが停止すると私は考えていました。
この最後の仮定は間違っていますか?
誰も同じような問題がありますか?
これを読んでいる人には、私が解決策を見つけた可能性があります。まだテストしていませんが、別の状況で同じ問題が発生しました。アニメーションブロック内でUIDynamicAnimatorのupdateItemUsingCurrentStateを使用していました。これは私のTrayViewクラスのケースではありませんでしたが、私はこの実現が将来の人々を助けるかもしれないと考えました。私が時間があれば、私はupdateItemUsingCurrentStateの使用状況を調べて、TrayViewクラスで問題が発生するのを止めることができるかどうかを調べます。 – Nailer