0

表示領域のみにコンテンツを提供するCALayerがあります(CATiledLayerに多少似ています)。問題は、CALayerの表示領域が変更されてdisplayLayerが呼び出されたときに、通知を受信する方法がないように見えることです。私は現在、setPosition、setBounds、およびsetTransformをサブクラス化してフックしていますが、これはスーパービュー/レイヤーが変更された場合をキャッチしません(たとえば、UIScrollViewはスクロールビューの原点を変更してスクロールします)。親ビューをフックして、コード全体にsetNeedsDisplayを振りかけたままにしておきます。

もっと良い方法はありますか?

4

1 に答える 1

2

現在表示されている四角形は[CALayer visibleRect]です。これはスクロール ビュー (レイヤー) によって設定され、スクロール ビューでの描画のベースとして期待されるものです。

-needsDisplayOnBoundsChangeおそらくオーバーライドして return にしたいでしょうYES。それは通常、あなたが説明していることのほとんどを処理する方法です.

position のようなもので再描画を強制したい場合 (これは珍しいことですが、可能です)、再描画を強制したいキーの変更をオーバーライド+needsDisplayForKey:して返すことができます。YES

描画する必要があるものだけを描画していることを確認したい場合はCGContextGetClipBoundingBox()、描画コード中に使用してクリッピング ボックスをチェックする必要があります。

于 2013-02-13T23:26:35.763 に答える