Анимации подслоя AVSynchronizedLayer, которые не соответствуют времени фильма - PullRequest
0 голосов
/ 07 января 2011

Я использую AVSynchronizedLayer для анимации положения CALayer вдоль пути. Поскольку синхронизация уровней совпадает с AVPlayerItem, слои корректно отслеживают элемент в видео во время его воспроизведения.

То, что я хотел бы сделать, это также иметь отдельную анимацию непрозрачности / вращения на слое, но я хочу, чтобы время не зависело от видео. Есть ли способ отменить это?

1 Ответ

0 голосов
/ 11 января 2011

Единственный способ сделать это - анимировать непрозрачность / поворот вручную, используя CADisplayLink и интерполируя значения без использования Core Animation.

startTimestamp = CACurrentMediaTime();
CADisplayLink *displayLink = [CADisplayLink displayLinkWithTarget:self
                                                         selector:@selector(animate:)]
[displayLink addToRunLoop:[NSRunLoop currentRunLoop] 
                  forMode:NSDefaultRunLoopMode];

...

- (void)animate:(CADisplayLink *)link {    
    float duration = 1.0;
    float dt = (link.timestamp - startTimestamp) / duration;

    // Done?
    if (dt > 1.0) {
        [link invalidate];
        return;
    }

    // Disable CoreAnimation implicit animations
    [CATransaction begin];
    [CATransaction setDisableActions:YES];
    layer.opacity = dt;
    [CATransaction commit];
}
...