2

iPhoneのUIViewでの描画処理を覚えようとしています。メソッド[UIView drawRect]が存在する場合にのみ、描画プロセスが発生することを理解しています。[ CALayer display ]で始まり、そのメソッド内から [UIView drawRect] が呼び出されます (正確には :first [ UIView drawLayer:layer inContext:context ] が呼び出され、このメソッド内から [UIView drawRect] が呼び出されます)。

2 つの質問があります。

  1. [ CALayer display ] メソッドはどのように UIView のコンテキストを取得しますか? ( [ CALayer display ] メソッド内の [ UIView drawLayer:layer inContext:context ] で使用されます)
  2. CALayer のコンテンツの更新はどのように行われますか? (ここのリンクに記載されている更新: [ CALayer 表示] )
4

1 に答える 1

2

最初の質問では、CALayerがCGContextRefの観点からコンテキストを作成し、それをそのデリゲートであるビューに渡すと言いたいと思います。2番目の質問については、私が観察したように、CALayersはハードウェアとビデオメモリに非常に近いようです。実際、CGImageRefをCALayerのコンテンツとして設定すると、画像が画面上で直接ビデオメモリに渡されます(これは時間のかかる操作です)。したがって、CALayerはCGContextRef(ビューによって埋められたもの)から一種の画像を取得し、それをコンテンツとして割り当てていると思います。または、作成されたコンテキストがビデオメモリ内のスペースであり、drawRectの各描画操作がそのメモリへのアクセスをトリガーする場合があります...

私はこれらのプロセスの専門家ではありませんが、私が見たものから何が起こっているのかを推測することしかできません。私は「ビデオメモリ」と言っていますが、iPhoneにはそのようなものはなく、ビデオ操作専用のメインメモリの一部であると思います。その部分がマッピングされ、InstrumentsのVMTrackerで消費量を確認できます。繰り返しになりますが、それについてはよくわかりません。誰かがもっと情報を持っていれば、それを聞いて喜んでいます!

于 2010-02-26T14:10:22.027 に答える