2014-09-02 98 views
0

我通过构建多个CALayer,将cgimage分配给图层内容,然后向每个图层添加CAAnimations来构建照片幻灯片。每个层都会脱落,并在持续时间(例如3秒)后开始时间&。没有任何动画时间重叠。最后,所有图层都添加到AVSynchronizedLayer中,以便使用AVPlayer进行播放。CAAnimation链接情况下的内存使用情况

问题:如何在各个动画运行时推迟图像加载?目前我在构建每个图层时都会执行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

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