繁体   English   中英

iPhone CALayer图像数组内容值

[英]iPhone CALayer image array contents values

将图像加载到图层的方法很简单:

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

所以值在那里..而且我没有任何错误..但是我没有看到图像...

让我知道您是否有想法。

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

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:绘制单个动画帧,然后循环遍历动画帧,在其中向图层提供帧图像,将其发送给display并将其内容属性保存到数组。 只要您不尝试以任何方式操纵预渲染的图像,缓存技术都是安全的:基本上,您只需要执行layer1.contents = layer2.contents

除非您确实有性能问题,否则不要浪费时间实施以上内容。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM