2014-09-02 6 views
0

Я создаю слайд-шоу фотографий, создавая несколько CALayers, назначая 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.

Смежные вопросы