链接时的CAAnimation内存使用情况

时间:2014-09-02 17:06:57

标签: calayer avplayer cgimage caanimation

我正在构建照片幻灯片,方法是构建多个CALayers,为图层内容分配cgimage,然后将CAAnimations添加到每个图层。每一层脱落并开始他们的开始时间&追求持续时间(比如3秒)。没有动画在时间上重叠。最后,所有图层都添加到AVSynchronizedLayer,以便使用AVPlayer进行播放。

问题:如何在各个动画运行时推迟图像加载?目前我在构建每个图层时都会使用imageLayer.contents =(id)self.image.CGImage,无论屏幕上是否可见,它都会增加内存使用量。

我还尝试通过设置内容属性来设置CALayer内容,如下所示:

    CABasicAnimation *contentsAnimation = [CABasicAnimation animationWithKeyPath:@"contents"];
    contentsAnimation.beginTime = startTime;
    contentsAnimation.duration = CMTimeGetSeconds(self.timeRange.duration);
    contentsAnimation.fromValue = (id) self.photoImage.CGImage;
    contentsAnimation.toValue = (id) self.photoImage.CGImage;
    contentsAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear];
    contentsAnimation.fillMode = kCAFillModeForwards;
    contentsAnimation.removedOnCompletion = NO;

    [imageLayer addAnimation:contentsAnimation forKey:@"contents"];

但问题是因为引用了CGImage,它会增加内存使用量。如果您有20张图像,则脏内存的大小会导致崩溃。

1 个答案:

答案 0 :(得分:0)

好的,我发现解决方案只是将UIImage加载代码放在@autoreleasepool {}中。我之前把这个autoreleasepool {}放在了错误的地方。它与CoreAnimation无关。