CATiledLayer a CALayer

Tengo una vista con un respaldo de CATiledLayer. Quiero tomar los mosaicos visibles de esta UIView CATiledLayer y agregarlo a otra vista como su respaldo CALayer, recreando así la image visible en otra UIView que no use CATiledLayer.

La razón por la que quiero hacer esto es que utilizaré esta segunda UIView para enmascarar el efecto de actualizar la UIView respaldada por CATiledLayer, esto produce actualmente un parpadeo a medida que se vuelven a cargar todos los mosaicos.

El problema es que no estoy completamente seguro de cómo haría esto. ¿Algunas ideas?

CATiledLayer es una subclass de CALayer que proporciona una manera de proporcionar de forma asincrónica elementos del contenido de la capa, potencialmente almacenados en caching en múltiples niveles de detalle.

Puede representar las cosas visibles en la capa en un CGContextRef con:

- (void)renderInContext:(CGContextRef)ctx 

Y luego usa esto para actualizar tu otra capa por la configuration de su delegado e implementando

 - (void)drawLayer:(CALayer *)layer inContext:(CGContextRef)context 

ss se muestra aquí http://www.raywenderlich.com/2502/introduction-to-calayers-tutorial

Pero, sinceramente, no creo que esto sea eficiente.

Tu verdadero problema aquí es el parpadeo. Tuve un problema similar en una vista con un CALayer personalizado respaldándolo, esto era parte de la solución: crea una subclass personalizada de tu CALayer e implementa el siguiente método:

 - (void) display { self.contents = nil; [super display]; } 

Esto solucionó un set de problemas para mí, pero puede que no lo solucione. La alternativa para que pueda deshabilitar las transactions mientras actualiza: De Referencia de class de CATransaction

setDisableActions: Establece si se suprimen las acciones desencadenadas como resultado de los cambios de propiedad realizados dentro de este grupo de transactions.

Entonces para usar esto:

 [CATransaction begin]; [CATransaction setDisableActions:YES]; // do updating/flickering stuff [self doFlickeringThing]; [CATransaction commit];