2

Quartz で作成しているグラフィックを動的に再描画するように CATiledLayer をセットアップしました。

このビューはスクロール ビューのコンテンツ ビューとして追加され、スクロールしてズームすると、グラフィックが適切な解像度で再描画され、期待どおりに動作します。

私の問題は、グラフィックを生成する値を変更すると(構造のようなグラフの視覚化です)、ビューでsetNeedsDisplayを変更すると、変更が適用され、一部のズームレベルで表示されますが、ズームアウトすると生成された古いグラフィックを表示します。もう一度ズームインすると、適切なグラフィックに戻ります。

タイル レイヤーのさまざまなズーム レベルがキャッシュされていると想定しているため、既にキャッシュされているズーム レベルには更新が適用されません。

私の質問は、これが事実である場合、CATiledLayer をキャッシュされたデータからではなく強制的に再描画する方法はありますか? そうでない場合、誰かが問題の原因を知っていますか?

4

1 に答える 1

0

まだこの問題が発生しているかどうかはわかりませんが、最近私自身が問題に遭遇しました。これは、画像を変更するときにCATiledLayersキャッシュをクリアする場合と同じ問題のようです。答えは、layer.contentをnilに設定してから、setNeedsDisplayまたはsetNeedsDisplayInRect:を使用して更新を呼び出すことです。したがって、setNeedsDisplayを呼び出して、ビューをクリアした後にビューを更新する場合は、代わりに次を使用します。

layer.content = nil;
[layer setNeedsDisplay];

上記のリンクされた質問の回答に対するコメントには、layer.contentプロパティを直接設定することに対する警告がありますが、これは私にとってはうまくいくようです。私は他のオプションを思い付くことができませんでしたが、おそらくレイヤーを削除して再追加することを除いて。

于 2012-10-18T17:51:53.110 に答える