iPhone CALayer图像数组内容值

时间:2011-01-31 17:23:40

标签: iphone ios core-animation calayer cgimage

将图片加载到图层的方法就是:

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

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

然后将图层作为子图层添加到视图中:

假设您在视图中

[self.layer addSublayer:layer];

现在我想加载一个图像数组作为动画,所以最终我会将图像设置为动画。

所以在实际执行动画之前我测试了以下内容:

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

当然有一个循环运行,将每个图像输入到正确的索引...然后我得到一个CGImage的数组用于动画。

我打印过这个数组并看到了这个:

CGImage 0x17d900

CGImage 0x17f4e0

所以价值就在那里......我没有得到任何错误..但我没有看到图像......

如果你有想法,请告诉我....

1 个答案:

答案 0 :(得分:5)

这是一个代码片段,适用于我的一个项目:

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

然而,我有动画帧和旧iPhone / iPod上的大图像导致严重的性能问题。如果碰到这个,秘密成分是使用预渲染图像(IIRC,它们用私有CABackingStore类表示)。简而言之,您创建了一个正确大小的CALayer,它使用drawInContext:绘制单个动画帧,然后循环遍历动画帧,在此处为图层提供帧图像,发送它{{1}并将其contents属性保存到数组中。只要您不尝试以任何方式操作预渲染图像,缓存技术就是安全的:基本上,您只需执行display

除非你遇到性能问题,否则不要浪费你的时间来实现上述目标。