2014-09-02 93 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沒有任何關係。