与电影时间不匹配的AVSynchronizedLayer子图层动画

时间:2011-01-07 15:22:50

标签: cocoa-touch core-animation avfoundation

我正在使用AVSynchronizedLayer为CALayer沿路径的位置设置动画。由于图层的时间与AVPlayerItem匹配,因此图层会正确跟踪视频中正在播放的项目。

我想要做的是在图层上还有一个单独的不透明度/旋转动画,但我希望它的时间独立于视频。有没有办法改写这个?

1 个答案:

答案 0 :(得分:0)

执行此操作的唯一方法是使用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];
}