2009-08-13 20 views
6

私は、CATiledLayerに裏打ちされた1つのサブビューUIViewを持つUIScrollViewを持っています。 1つの例外を除いて、すべてがうまくいきます。画像を1つずつ変更すると、CATiledLayerは以前の画像のズームレベルをキャッシュします。スクロールすると、更新されたイメージが読み込まれる前に、1秒間古いイメージが表示されます。画像を変更するときにCATiledLayersキャッシュをクリアする

CATiledLayerのキャッシュを完全にクリアして古いイメージを表示しない方法はありますか? CATiledLayerは明らかにバッキングイメージが変更されたことを知っています。これは新しいタイルのデリゲートです。

答えて

23

私はあなたが必要とするよりも少し複雑にしていると思います。あなたがしなければならないことは、あなたのCATiledLayerの内容をnilに設定することだと私は信じています。

myCATiledlayer.contents = nil. 
+13

ソーカの中では、CATiledLayersの内容を変更すると効果的に通常のCALayerに変えられると警告しています。アップルの従業員は私に教えてくれました。最近変換されたCALayer-CATiledLayerの上でsetNeedsDisplayを呼び出すと、魔法のように* CATiledLayerに戻ります。 – prime31

+0

Tyne最初の孤独は読んでください: "ドキュメントの中で..." – prime31

+3

私はprime31と同じ問題を抱えていました。私は[myCATiledlayer setNeedsDisplay]を呼び出す前にmyCATiledlayer.contents = nilを呼び出して、その仕事をしました。わーい! – aslisabanci

2
-(void)invalidate 
{ 
    CATiledLayer *tiledLayer = (CATiledLayer *)[self layer]; 

    tiledLayer.tileSize = CGSizeMake(93,93);//Set a different tile size 
    tiledLayer.tileSize = CGSizeMake(92,92);//Restore original tile size 
} 

これは私のために動作します。

関連する問題