2009-08-13 12 views
6

Tengo un UIScrollView con una única subvista, una UIView respaldada por un CATiledLayer. Todo funciona bien con una excepción: cuando cambio imágenes de una a otra, CATiledLayer almacena en caché los niveles de zoom de las imágenes anteriores. Al desplazarse, se muestra la imagen anterior durante una fracción de segundo antes de que se cargue la imagen actualizada.Borrar caché CATiledLayers al cambiar imágenes

¿Hay alguna forma de eliminar por completo la memoria caché de CATiledLayer para que no muestre las imágenes antiguas? El CATiledLayer obviamente sabe que la imagen de respaldo ha cambiado porque pregunta si es delegado para nuevas teselas ...

Respuesta

23

Creo que estás haciendo esto un poco más complicado de lo necesario. Creo que todo lo que tienes que hacer es establecer el contenido de tu CATiledLayer en cero.

myCATiledlayer.contents = nil. 
+13

Justo en el soca, advierte que la modificación de los contenidos de CATiledLayers lo convertirá efectivamente en un CALayer regular y, por supuesto, sí lo es. Sin embargo, un empleado de Apple me contó un truco: si llama a setNeedsDisplay en la versión recientemente convertida de nuevo a CALayer-CATiledLayer, * mágicamente * volverá a ser una versión de CATiledLayer. – prime31

+0

Tyne first lone debería leer: "Justo en los documentos ..." – prime31

+3

Tuve el mismo problema que prime31 y esta solución funcionó muy bien. Llamé a myCATiledlayer.contents = nil antes de llamar a [myCATiledlayer setNeedsDisplay], e hizo el trabajo. ¡Hurra! – 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 
} 

Esto funciona para mí.

Cuestiones relacionadas