Imagen de background para CATiledLayer

Como sabrás, CATiledLayer se usa para mostrar imágenes grandes al mostrar imágenes en mosaico a escala adecuada para el tamaño de la vista.

Tengo CATiledLayer trabajando similar al ejemplo que se puede encontrar en la documentation de iOS y calculo en qué fila y columna drawRect:(CGRect) rect está tratando de dibujar su contenido.

Cuando aparece la vista por primera vez, comienza a dibujar mosaico por mosaico en la vista en blanco sin nada detrás de esa vista / capa. Estoy intentando poner una image de baja resolución al principio para llenar la capa y luego comenzar a dibujar la vista en mosaico.

Al igual que cuando se mueve a través de páginas PDF, cada página se representa al principio con una image muy pobre, pero es suficiente para ver el layout del contenido y cuando se detiene en cierta página, esta página se vuelve más clara.

Sé que puedo añadir subcapas sobre catiledlayer, pero no soy capaz de poner ninguna capa detrás de catiledlayer porque es un maestro. También creo que es importante cargar la image de background en la misma capa para que se pueda escalar correctamente.

¿Alguien tiene una idea de cómo lograr esto?

Finalmente me doy count de esto y del comentario key.

Lo que tienes que hacer:

  1. Crear subclass de CATiledLayer con toda la lógica de carga dinámica dentro de la function drawLayer: inContext: esta function es como drawRect: dentro de la Vista
  2. Inicia tu nueva subclass CATiledLayer
  3. Init nuevo CALayer con image de baja resolución
  4. Cree una nueva UIView * myView = [UIView …] o UIImageView (dependerá de sus necesidades)
  5. Ponga las dos capas en myView.layer como subLabor

 UIView *imageView = [[UIView alloc] initWithFrame:viewFrame]; DCTiledLayer *tiledLayer = [[DCTiledLayer alloc] initWithData:myData]; CALayer *lowResLayer = [CALayer layer]; lowResLayer.position = CGPointMake(CGRectGetMidX(viewFrame), CGRectGetMidY(viewFrame)); lowResLayer.bounds = viewFrame; lowResLayer.contents = (id)[lowResImage CGImage]; [imageView.layer addSublayer:lowResLayer]; [imageView.layer addSublayer:tiledLayer]; 

Funciona a las mil maravillas. 🙂