1

機械的に重要な3つのネストされたビューがありますが、視覚的な要素がないアプリケーションがあります。

  • 独自のコンテンツを持たず、単にCALayersのホストとして使用されるバニラUIView。
  • UIScrollView(原点が照会され、CALayersを3Dに配置するために使用されます。実際には、このビューを使用して、スクロールビューの「メカニズム」を忠実に複製します)、
  • スクロールビューの内容:UIViewサブクラス。タッチイベントを取得してデリゲートに渡すだけです。重要なのはUIResponder機構だけです。

CALayersをホストするUIViewは、CALayersが描画される背景画像であるUIImageViewの兄弟です。

これらの空のUIViewのいずれにも、描画または合成のオーバーヘッド(時間またはストレージ)が関連付けられていないことを確認するか、それが不可能な場合は、このオーバーヘッドをできるだけ小さくして理解したいと思います。別のアプローチを試すべきかどうかを決めることができるかもしれません。

Interface Builderでは、描画する前にコンテキストをクリアしないようにすべてのビューを設定しました。ただし、これらは完全に不透明ではないため、不透明に設定していません。完全に透明です。スクロールビューのコンテンツに透明なクリアカラーを指定する必要があることがわかりました(これもIBで、背景色の不透明度をゼロに設定することで)。これは、描画されていることを示していますが、これは望ましくありません。

つまり、何が描画され、何が描画されないのか(iPhone/シミュレーター用のQuartzDebugのようなツールを知っている人はいますか?)、または描画されないようにする方法についてはあまりわかりません。

アドバイスは大歓迎です!ありがとう、ベンジョン

4

2 に答える 2

1

私が話すことができないUIScrollViewを除いて、setNeedsDisplayを手動で呼び出すか、レイヤーのneedsDisplayOnBoundsChangeプロパティをYESに設定していない限り、他のビューはオーバーヘッドを描画する方法があまりないはずです。ビューは 1 回描画され、その時点でレイヤーが GPU にキャッシュされます。再描画にはコストがかかりますが、これは、上記の方法で手動でトリガーした場合にのみ発生します。これらのビューとレイヤーはメモリを使用するため、特に囲んでいるビューが非常に大きくなる場合 (特に 2048 x 2048 のテクスチャ制限サイズに近い場合) は懸念事項です。残念ながら、それについてできることはあまりありません。

提案として、レイヤーを 3D で回転およびスケーリングするだけの場合は、Core Animation を使用して iPhone で 3D 回転およびスケーリングを行うために私が作成したサンプル コードを参照することをお勧めします。. これは Bill Dudney によって書かれたコードに基づいており、タッチ イベントはシングルタッチ移動と 2 本指のピンチ ジェスチャに処理され、3D でレイヤーを操作するために使用されます。これにより、UIScrollView とカスタム コンテンツ ビューが不要になり、コードが簡素化される場合があります。

于 2009-05-27T13:33:02.220 に答える
0

実際には、Instruments を Core Animation ツールで使用して、何が描画されているかを確認できます (フラッシュはデバイスのグローバル設定であるため、終了する前に必ず無効にしてください)。

于 2009-12-14T01:05:53.417 に答える