2015-06-22 2 views
1

Я хочу добавить наложение изображений на видео.
Для этого я следовал this учебник. Теперь я хочу добавить fade in в течение 1 секунды и исчезнуть через 5 секунд в течение 1 секунды. Для этого я написал следующий код.Добавить анимированное оверлейное изображение в видео

CALayer *overlayLayer1 = [CALayer layer]; 
[overlayLayer1 setContents:(id)[overlayImage CGImage]]; 
overlayLayer1.frame = CGRectMake(0, 0, size.width, size.height); 
[overlayLayer1 setMasksToBounds:YES]; 

CALayer *overlayLayer2 = [CALayer layer]; 
[overlayLayer2 setContents:(id)[overlayImage CGImage]]; 
overlayLayer2.frame = CGRectMake(0, 0, size.width, size.height); 
[overlayLayer2 setMasksToBounds:YES]; 

CALayer *overlayLayer3 = [CALayer layer]; 
[overlayLayer3 setContents:(id)[overlayImage CGImage]]; 
overlayLayer3.frame = CGRectMake(0, 0, size.width, size.height); 
[overlayLayer3 setMasksToBounds:YES]; 

CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"opacity"]; 
animation.duration=1.0; 
animation.repeatCount=1; 
animation.autoreverses=NO; 
animation.fromValue=[NSNumber numberWithFloat:0.0]; 
animation.toValue=[NSNumber numberWithFloat:1.0]; 
animation.beginTime = AVCoreAnimationBeginTimeAtZero; 
[overlayLayer1 addAnimation:animation forKey:@"animateOpacity"]; 

animation = [CABasicAnimation animationWithKeyPath:@"opacity"]; 
animation.duration=5.0; 
animation.repeatCount=1; 
animation.autoreverses=NO; 
animation.fromValue=[NSNumber numberWithFloat:1.0]; 
animation.toValue=[NSNumber numberWithFloat:1.0]; 
animation.beginTime = CACurrentMediaTime() + 1.0; 
[overlayLayer2 addAnimation:animation forKey:@"animateOpacity"]; 

animation = [CABasicAnimation animationWithKeyPath:@"opacity"]; 
animation.duration=1.0; 
animation.repeatCount=1; 
animation.autoreverses=NO; 
animation.fromValue=[NSNumber numberWithFloat:1.0]; 
animation.toValue=[NSNumber numberWithFloat:0.0]; 
animation.beginTime = CACurrentMediaTime() + 6.0; 
[overlayLayer3 addAnimation:animation forKey:@"animateOpacity"]; 

[parentLayer addSublayer:overlayLayer1]; 
[parentLayer addSublayer:overlayLayer2]; 
[parentLayer addSublayer:overlayLayer3]; 
composition.animationTool = [AVVideoCompositionCoreAnimationTool videoCompositionCoreAnimationToolWithPostProcessingAsVideoLayer:videoLayer inLayer:parentLayer]; 

Но когда я запустил этот код, анимации для наложения изображений нет. Просто изображение отображается на все время.

Я использовал GPUImage для некоторых других действий в этом проекте. Если через GPUImage я могу это сделать, пожалуйста, помогите мне решить это.
Пожалуйста, помогите мне решить эту проблему.

ответ

1

Я думаю, ваша проблема в том, что вы добавляете анимацию для того же ключа.
Попробуйте под кодом, где я предлагаю вам создать другой объект для анимации и использовать другой ключ.

CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"opacity"]; 
animation.duration=1.0; 
animation.repeatCount=1; 
animation.autoreverses=NO; 
animation.fromValue=[NSNumber numberWithFloat:0.0]; 
animation.toValue=[NSNumber numberWithFloat:1.0]; 
animation.beginTime = AVCoreAnimationBeginTimeAtZero; 
animation.removedOnCompletion=NO; 
animation.fillMode = kCAFillModeForwards; 
[overlayLayer1 addAnimation:animation forKey:@"animateOpacity"]; 

CABasicAnimation * animation1 = [CABasicAnimation animationWithKeyPath:@"opacity"]; 
animation1.duration=1.0; 
animation1.repeatCount=1; 
animation1.autoreverses=NO; 
animation1.fromValue=[NSNumber numberWithFloat:1.0]; 
animation1.toValue=[NSNumber numberWithFloat:0.0]; 
animation1.beginTime = AVCoreAnimationBeginTimeAtZero+6.0; 
animation1.fillMode = kCAFillModeForwards; 
animation1.removedOnCompletion=NO; 

[overlayLayer1 addAnimation:animation1 forKey:@"animateOpacity1"]; 

Надеется, что это работает ...