2009-08-13 13 views
6

Tek bir alt görünümle bir UIScrollView'ım var, bir CATiledLayer tarafından desteklenen bir UIView. Hepsi bir istisna ile iyi çalışıyor: görüntüleri birinden diğerine değiştirdiğimde, CATiledLayer önceki görüntüleri yakınlaştırma düzeylerini önbelleğe alır. Çevresinde gezinmek, güncellenmiş görüntü yüklenmeden önce eski görüntüyü bölünmüş bir saniye için görüntüler.Görüntüleri Değiştirirken CATiledLayers Önbelleğini Temizle

eski görüntüleri göstermiyor CATiledLayer önbelleğinde dışarı tamamen berrak böylece herhangi bir yolu var mı? CATiledLayer açıkçası yeni karoları için 's temsilci ...

cevap

23

Sana olması gerekenden daha bu biraz daha karmaşık yapıyoruz düşünüyorum sorar çünkü arka görüntü değişti biliyor. Yapmanız gereken tek şey, CATiledLayer'ınızın içeriğini sıfırlamak olduğuna inanıyorum.

myCATiledlayer.contents = nil. 
+13

Sağ. Ancak bir Apple çalışanı bana bir hile yaptı: Eğer setNeedsDisplay'i CALayer-CATiledLayer'a dönüştürdüyseniz, o zaman * sihirli bir şekilde bir CATiledLayer'a dönecektir. – prime31

+0

İlk önce Tyne okumanız gerekir: "Dokümanlarda doğru ..." – prime31

+3

prime31 ile aynı problemi yaşadım ve bu çözüm harika çalıştı! [MyCATiledlayer setNeedsDisplay] 'i çağırmadan önce myCATiledlayer.contents = nil'i aradım ve işini yaptım. Yuppi! – 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 
} 

Bu benim için çalışıyor. Bir CATiledLayers içeriğini değiştirerek etkin bir şekilde emin yeterli öyle düzenli bir CALayer çevirmek ve uyarısını Soca