2011-12-18 1 views
1

AVSyncronizedLayer을 사용하여 테스트로 프로젝트를 설정하여 동영상 재생시 화면 전체에 빨간색 선 (CALayer)을 이동했습니다.AVSynchronizedLayer를 사용할 때 애니메이션이 시작되지 않음

이 때 나는 대답 given here을 참조하고 그 해결책을 포함 시켰지 만 비디오가 나오면 애니메이션이 시작되지 않습니다.

누군가 내가 잘못 가고있는 아이디어가 있다면 정말 도움이 될 것입니다. 코드는 다음과 같습니다.

- (void)viewDidLoad 
{ 
[super viewDidLoad]; 
// Do any additional setup after loading the view, typically from a nib. 

//create the red line sublayer 
redLine = [CALayer layer]; 
redLine.backgroundColor = [UIColor redColor].CGColor; 
redLine.frame = CGRectMake(engravingControl.frame.origin.x, engravingControl.center.y - (engravingControl.frame.size.height/2), 3, engravingControl.frame.size.height); 


//create the AVplayer object 
NSURL *fileURL = [[NSBundle mainBundle] URLForResource:@"IMG_1306" withExtension:@"mov"]; 
AVURLAsset *asset = [AVURLAsset URLAssetWithURL:fileURL options:nil]; 
AVPlayerItem *playerItem = [AVPlayerItem playerItemWithAsset:asset]; 

AVPlayer *player = [AVPlayer playerWithPlayerItem:playerItem]; 
AVPlayerLayer *playerLayer = [AVPlayerLayer playerLayerWithPlayer:player]; 
playerLayer.frame = CGRectMake(0, 0,400,300); 
playerLayer.videoGravity = AVLayerVideoGravityResizeAspectFill; 

//add the subViews 
[self.view.layer addSublayer:playerLayer]; 
[self.view.layer addSublayer:redLine]; 

CABasicAnimation *redLineMove; 
redLineMove=[CABasicAnimation animationWithKeyPath:@"transform.translation.x"]; 
redLineMove.duration=10; 
redLineMove.fromValue=[NSNumber numberWithFloat:engravingControl.frame.origin.x]; 
redLineMove.toValue=[NSNumber numberWithFloat:engravingControl.frame.size.width + engravingControl.frame.origin.x]; 
redLineMove.beginTime = AVCoreAnimationBeginTimeAtZero; 


//create the sync layer 
AVSynchronizedLayer *syncLayer = [AVSynchronizedLayer  synchronizedLayerWithPlayerItem:playerItem]; 
[syncLayer addSublayer:redLine]; 
[redLine addAnimation:redLineMove forKey:@"redLineMove"]; 

[self.view.layer addSublayer:syncLayer]; 

[player play]; 

} 

답변

4

이 해결책을 발견했습니다. 다음 코드 줄이없는 경우 :

animation.removedOnCompletion = NO; 

그런 다음 애니메이션 (I 영화가 재생을 시작하기 전에이 CA에 의해 제거 추정) 시작되지 않습니다.

추가하십시오. 예상대로 작동합니다.