1

ここに画像の説明を入力してください

やあみんな。コアグラフィックスでこのようなものを描くことについてのいくつかの重要なポイントに興味があります。

いつ複数のレイヤーを使用する必要がありますか? クリッピングパスを使用してコーナーを丸めることができることはわかっています。私が理解していることから、CALayerに境界線の半径を設定するよりも効率的であるように思えます。

drawRectでUIImageViewからの出力を使用することは可能ですか? ビューを実際に使用できないことは知っていますが、多くの場所で、UIImageViewは、drawRectで直接描画するよりも、画像を描画する方がはるかに効率的であることがわかりました。どういうわけかそこでそれらを活用することは可能ですか、それともそれを吸い上げてCGを使用する必要がありますか?

このようなセルを描画してFPSレートをできるだけ高くするための最良の方法に関するその他のヒント、コツ、およびリソースを歓迎します。

4

2 に答える 2

1
  1. 現在、パフォーマンスは問題になっていますか? あなたが遅れに気づき、それが「遅い」描画によるものであると確信するまで、私は「最適化」を避けます.

  2. まだ始めていない場合は、基本的/単純なアプローチを行ってください。ほとんどの場合、新しい iOS デバイスでは十分に高速です。

  3. drawRect で画像を描画するだけで、派手なことは何もしません。

PaintCode は役に立ちますか? デザインに基づいて Core Graphics コードを出力します。

于 2013-02-01T22:12:27.030 に答える
1

複数のレイヤーをいつ使用する必要がありますか?

残念ながら、答えは次のとおりです。レイヤーは安価であり、UIView/UIImageView よりも確実に軽量ですが、従来の iOS レスポンダー チェーンの一部ではありません (タッチを直接受信/中継できないため) が、通常はセル自体がそれを処理します。Appleは、きれいにするために分割されたビュー階層を優先して避けることをお勧めします -drawRect:が、それは背景用に別のビューを持たなければならないという意味ではありません。

drawRect で UIImageView からの出力を使用することは可能ですか?

FPS に問題がある場合は、問題のない箇所を最適化する前に、その原因を特定することをお勧めします。最初に画像を調査します。何らかのキャッシュを実行していますか、それともテーブルビュー セルが呼び出されるたびに再描画する必要があり-drawRect:ますか? UIImageView は、画像に対して何らかのサイズ変更/スケーリング/解凍を実行する必要がありますか? もしそうなら、自分で画像のサイズを一度変更し、その結果をビットマップコンテキストに保存することを検討しましたか? UIImageView に時間を無駄にするのではなく、配列から引き出して描画するだけですか?

あなたの他の質問が閉じている限り、私はアニメーションにも対処します

特にセルが CALayer を使用するのではなく、Core Graphics で背景を描画している場合は、表のセルの背景をアニメーション化するのは簡単です (つまり、CABasicAnimation を使用して背景色との間でアニメーション化することを意味します)選択された状態の変化に対する TwUI のアニメーション メカニズムが特に気に入っています。

  1. アニメーション コンテキストを開始します。
  2. を呼び出すメソッド-setNeedsDisplay、またはアニメーション化する追加の作業を行うメソッドを用意します。
  3. アニメーションをコミットします。
于 2013-02-01T22:34:41.673 に答える