私はUIViewサブクラスでdrawRect
を使用してカスタム図面を作成しています。それは素晴らしいですが、描画ループが終了するまで待つ必要があります。drawRectを呼び出すためには、フレームをフレームアニメーションでどのように制御できますか?おそらく、Quartzは実際にこのタイプのアニメーショングラフィックス用に設計されていませんか?私はおそらくそれほど頻繁に変化しない静的図面のために設計されているかもしれないと思います。Quartzによる連続描画ですか?フレームごとに可能ですか?
答えて
クォーツ自体は、毎回すべてを再描画する必要があるため、高いフレームレートを維持できません。しかし、QuartzにCoreAnimationを連動させることで、Quartzベースのアニメーションを作成することができます。この背後にある考え方は、CALayerオブジェクト内に以前に描画されたコンテンツをキャッシュし、次にCoreAnimationを使用して連続的な描画エフェクトを作成できるということです。
この手法の良い例は、AccelerometerGraph sample code provided by Appleにあります。このサンプルの中で、このテクニックを使用するUIViewサブクラスは "GraphView"オブジェクトです。基本的にこのオブジェクトは、グラフの一部(新しく生成されたセグメント)を完全に新しいものとして描画し、それを専用レイヤーにバックアップし、レイヤーをアニメーション化して「スクロールグラフ」アニメーションを提供します。
明らかに、このテクニックは、描画要素を完全に制御しているときにのみ機能し、画面内にオブジェクトを追加するこの増分方法を管理できます。もちろん、画面のさまざまな部分を再描画する必要があり、以前に生成されたレイヤーを変更する必要がある場合は、はるかに複雑になります。
とにかく上記のコードを見てください:それはかなり面白いです。
アプリは、各フレームの前に実行ループに戻る必要があります。すべてのカスタムフレームアニメーションを各フレーム間で設定します。 drawRectのフレームごとの描画はうまくいくはずです。これは、静的ビューだけでなく、フレーム時間とdrawRects間のすべてのメソッドが十分に速い限り、iOSアプリケーションで60 Hzのフレーム更新レートで動作します。必要に応じてそれらを切ります。
実行ループが終了して新しいフレームが開始されたときには理解できないと思います。フレームアニメーションロジックはどこに置くのですか?たとえば、 'for'ループは同じ実行ループ内で終了します。したがって、forループ内の 'setNeedsDisplay'への繰り返し呼び出しは機能しません...描画は、ループが終了したときにのみ発生します。 – johnbakers
@andrewx:forループと、forループを含むメソッドを終了し、実行ループがいくつかの描画を実行できるようにフレームごとに終了する必要があります。後続の別のメソッド呼び出しで、forループロジックに戻ることができます。いくつかの状態を保存して復元する必要があるかもしれません。 – hotpaw2
私は実行ループの管理について多くのことを学ぶ必要があるように聞こえます:) – johnbakers
- 1. EAGLLayer上にQuartz 2Dを描画することは可能ですか?
- 2. 処理:xフレームごとにどのように描画すればよいですか?
- 3. フレームごとにフレームを描く方法フレームxからフレームyへのアニメーション
- 4. OpenCLでプリミティブを描画することは可能ですか?
- 5. ListViewGroupをカスタム描画することは可能ですか
- 6. JavaのようなC#による描画は可能ですか?
- 7. Quartz 2D描画プリミティブローテーション
- 8. アンドロイドのテキストビューで描画可能なサイドベクトル描画可能ベクトル
- 9. Cocoa OSXとiOSのQuartzでは、線を描いてどのように「接続」するのですか?
- 10. Quartz 2D:サブクラス化せずにビューに描画しますか?
- 11. リストビューに描画可能なフォルダに一連の画像を追加する
- 12. Android:描画可能なフォルダから画像をビジュアルにする
- 13. パラメトリックベクトル描画可能にする
- 14. バックグラウンドで描画可能ActionBar
- 15. 描画可能でない
- 16. AndroidのsetThumb(描画可能)可変タイプですか?
- 17. GtkDrawingArea - 描画可能にするにはどうすればいいですか?
- 18. ローカライゼーションと描画可能
- 19. Quartz Schedulerはジョブを連続して実行できますか?
- 20. ビデオプロンプトでフレームごとに処理する
- 21. 連続描画/アニメーションiOS
- 22. AirConsoleでユーザーごとの永続データを持つことは可能ですか?
- 23. Java Graphics2dで並列描画が可能ですか?
- 24. 画像内に複数の輪郭を描くことは可能ですか?
- 25. ユニティ:可能な限り速くフレームを描画
- 26. ggplot2でマイナーグリッドを0.1ごとに描画するにはどうすればよいですか?
- 27. Quartzでトリガーの発射を延期することは可能ですか?
- 28. invalidateSelf()を使用してタイマによって描画可能な描画を再描画する
- 29. プログラムでベクトル描画可能にするLollipop
- 30. iphoneのようなEditText用の拡大鏡:ビューの外に描画することは可能ですか?
提案に感謝してありがとう – johnbakers