我正在使用AVSynchronizedLayer为CALayer沿路径的位置设置动画。由于图层的时间与AVPlayerItem匹配,因此图层会正确跟踪视频中正在播放的项目。
我想要做的是在图层上还有一个单独的不透明度/旋转动画,但我希望它的时间独立于视频。有没有办法改写这个?
答案 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];
}