2011-01-31 19 views
5

La forma de cargar la imagen de la capa es simplemente esto:iPhone CALayer contenido de la matriz imagen valores

CALayer *layer = [[CALayer alloc]init]; 

layer.contents = (id) [UIImage imageNamed:@"image.png"].CGImage; 

entonces añadir la capa como subcapa a la vista algo como:

que asumen en la vista

[self.layer addSublayer:layer]; 

Ahora quiero cargar una matriz de imágenes como animación para que eventualmente obtenga las imágenes animadas.

así que antes de realizar la animación en realidad he probado las siguientes:

[values insertObject:(id)[UIImage imageNamed:path].CGImage atIndex:i]; 

Por supuesto, hay un bucle que que corre que entran en cada imagen para el índice derecho ... y luego me estoy haciendo una serie de CGImage .. para la animación.

he impresa de esta matriz y vi esto:

CGImage 0x17d900

CGImage 0x17f4e0

Así que los valores están ahí .. y no estoy recibiendo ningún error .. pero no veo las imágenes ...

Déjeme saber si usted tiene una idea ....

+0

¿Cómo está haciendo la animación o cambiando elementos entre los contenidos de la matriz para su visualización? – hotpaw2

Respuesta

5

Este es un fragmento de código que funcionaba bien para uno de mis proyectos:

CAKeyframeAnimation *animation = [CAKeyframeAnimation animationWithKeyPath: @"contents"]; 
animation.calculationMode = kCAAnimationDiscrete; 
animation.duration = 1.0; 
animation.values = values; // NSArray of CGImageRefs 
[layer addAnimation: animation forKey: @"contents"]; 

Sin embargo, tuve imágenes largish de cuadros de animación y sobre viejos iPhones/iPods que causaron serios problemas de rendimiento. Si te topas con esto, el ingrediente secreto es usar imágenes pretratadas (IIRC, están representadas con una clase privada CABackingStore). En pocas palabras, usted hace una CALayer del tamaño correcto, que usa drawInContext: para dibujar un solo cuadro de animación, luego recorre los cuadros de la animación, donde alimenta la capa de una imagen de marco, la envía display y guarda su propiedad de contenido en una formación. La técnica de almacenamiento en caché es segura siempre que no intente manipular las imágenes pretratadas de ninguna manera: básicamente, simplemente haga layer1.contents = layer2.contents.

Simplemente no pierdas tu tiempo implementando lo anterior a menos que tengas problemas de rendimiento.

+0

Sí, me perdí el keyPath. –

Cuestiones relacionadas