我正在构建照片幻灯片,方法是构建多个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张图像,则脏内存的大小会导致崩溃。
答案 0 :(得分:0)
好的,我发现解决方案只是将UIImage加载代码放在@autoreleasepool {}中。我之前把这个autoreleasepool {}放在了错误的地方。它与CoreAnimation无关。