2

私の iPhone アプリでは、画面上を個別に移動する 10x10 ピクセルの小さなドットを多数 (最大 150) 表示する必要があります。スムーズに動く必要はありませんが、1 秒ごとに更新する必要があります。現在、私は毎秒再描画する単一の CALayer として実装しています。

しかし、CALayer は GPU ハードウェアにマッピングされているため、非常に効率的であることは理解しています。そのため、ドットごとに個別の CALayer を作成し、それらの位置プロパティを設定して移動する方が (バッテリー使用量の点で) 効率的かどうか疑問に思いました。

それで、あなたはその経験があるかどうか疑問に思います。CPU の処理は少なくなりますが、GPU の処理は多くなります。GPU ハードウェアでまだ処理できる CALayer の数は?

それらを別々の CALayer にすれば、簡単にアニメーション化することもでき、見栄えが良くなります。それはより多くのエネルギー集約的でしょうか?

私の場合さらに悪いのは、現在、公開されている最大 4 つのタイルで CATiledLayer を使用していることです。これは、更新ごとに 4 回再描画する必要があることも意味します。

4

1 に答える 1

2

そこの。あなたと同じような問題に遭遇しました。私の場合、棒グラフに 80 ほどの棒ライザーを描いていました。以前は、各ライザーに (drawRect が実装された) UIView を使用していましたが、その後、アニメーション用にそれぞれのライザーに (drawLayerInContext を実装せずに) CALayer を使用することにしました。バー番号が 80 の場合、1 が見つかりました。UIView メソッドは、より多くのメモリを消費します (drawRect で cgcontext を要求するため)。2. UIView メソッドのアニメーション応答性が向上しました。私の場合、UIVE FPS は 60 程度ですが、CALayer は 34 程度です。

その後、バー数が少ないケース(40、30 など)を試してみたところ、GPU への負担が少なく、CALayer アニメーションから満足のいく FPS 数を得ることができました。

ここで言いたいのは、「1 ドットあたり 1 レイヤー」に切り替えた場合、アニメーションが以前と同じくらいスムーズかどうかを確認する必要があるということです。

于 2012-07-05T02:33:25.010 に答える