2

Apples WWDC 2012 のビデオ セッション 506 で、彼らはハイ パフォーマンス ドローイング用に作成された (フレーム レートが 30 を下回らないように) ペイント アプリを示しました。

コードを複製しようとしましたが、複数の点で行き詰まりました。

私が探しているのは、基本的な描画アプリ (線、正方形、円、ベジェ パス) で、何百もの線が描画された後でもうまく機能します。

基本的なアプローチは、描画された線 (または円、ベジェパスなど) を一定数描画した後に画像に保存し、新しい描画のみを更新することです。したがって、既に描画されたすべての線を再描画する必要はありません。

しかし、どういうわけか、私はより高いパフォーマンスに到達することはありません。これをどのように実装する必要がありますか? 複数のレイヤーが必要ですか? また、ビュー内のすべてのレイヤーが再描画されるのではなく、特定のサブレイヤーのみが再描画されるようにするにはどうすればよいでしょうか?

誰かがレイヤーに描かれた数本の線の簡単な例を提供してくれたら、そのレイヤーを画像に保存し、その上に描画してくれると本当にありがたいです.

iPaint アプリケーションの再作成にご協力いただきありがとうございます。残念ながら、Apple からダウンロードすることはできません。

4

2 に答える 2

1

それはパズルの半分にすぎません。残りの半分は、ビューの可能な最小領域のみを更新することです(を介してsetNeedsDisplayInRect:)。ただし、私はCoreGraphicsを介してさまざまな方法で描画してきました。キャッシングは問題ありませんが、私はもう使用していません。更新長方形を上記のように設定し、ストロークする前に各パスをテストします(テストは高速で、ストロークは低速です)。更新ボックス内にある場合はストロークし、そうでない場合は無視します。

于 2012-09-11T12:40:21.280 に答える
1

私はそのセッションを見ていませんでしたが、従来の Quartz の高速化は (CALayers ではなく) CGLayers を使用することでした。CGLayer は、ビットマップである場合もそうでない場合もある、キャッシュされた描画と考えることができます (システムが最適なキャッシュ方法を決定します)。バッキング ビットマップ コンテキストがある場合は、それを「イメージ」として使用し、CGLayers をその中に描画します (その後、レイヤーを破棄します)。CGLayer (Quartz のドキュメントにあります) を読んで、そのセッションで彼らが話していた内容がこれであるかどうかを確認してください。

于 2012-09-11T11:37:07.527 に答える