2011-01-07 3 views
0

AVSynchronizedLayer를 사용하여 경로를 따라 CALayer의 위치를 ​​애니메이션합니다. 레이어의 타이밍이 AVPlayerItem과 일치하기 때문에 레이어는 비디오가 재생되는 동안 항목을 올바르게 추적합니다.동영상의 타이밍과 일치하지 않는 AVSynchronizedLayer 하위 레이어 애니메이션

레이어에서 별도의 불투명/회전 애니메이션을 사용하고 싶지만 동영상과 독립적 인 타이밍을 원합니다. 이 문제를 무시할 수있는 방법이 있습니까?

답변

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]; 
} 
관련 문제