Платформа AVFoundation предоставляет класс AVMutableVideoComposition (изменяемый вариант AVVideoComposition). Похоже, вы можете визуализировать CoreAnimations непосредственно в экземпляр этого класса для создания видео, но я не знаю, как сохранить композицию в файл или как вообще с ней работать. Следующий код, вызываемый из UIViewController, похоже, работает для создания композиции и анимации, но, в общем, я озадачен тем, как работать с композицией. Любая помощь или руководство с благодарностью.
static AVMutableVideoComposition *videoComposition = nil;
- (void)animationDidStop:(CAAnimation *)animation finished:(BOOL)flag {
//Do something with videoComposition here... how to save it to a file?
NSLog(@"videoComposition: %@", videoComposition);
[videoComposition release]; videoComposition = nil;
}
- (IBAction)createVideoComposition:(id)sender {
AVVideoCompositionCoreAnimationTool *videoCompositionCoreAnimationTool = [AVVideoCompositionCoreAnimationTool videoCompositionCoreAnimationToolWithPostProcessingAsVideoLayer:self.view.layer inLayer:self.view.layer];
videoComposition = [[AVMutableVideoComposition videoComposition] retain];
[videoComposition setRenderSize:CGSizeMake(320.0, 480.0)];
[videoComposition setRenderScale:1.0];
[videoComposition setFrameDuration:CMTimeMake(1, 10)];
[videoComposition setAnimationTool:videoCompositionCoreAnimationTool];
//add a basic animation to shake the controller's view
CAKeyframeAnimation *shakeAnimation = [CAKeyframeAnimation animationWithKeyPath:@"position"];
shakeAnimation.delegate = self;
shakeAnimation.removedOnCompletion = YES;
shakeAnimation.duration = 0.5;
CGMutablePathRef path = CGPathCreateMutable();
CGFloat midX = self.view.center.x;
CGFloat midY = self.view.center.y;
CGPathMoveToPoint(path, nil, midX, midY);
CGPathAddLineToPoint(path, nil, midX + 10.0, midY);
CGPathAddLineToPoint(path, nil, midX - 20.0, midY);
CGPathAddLineToPoint(path, nil, midX + 15.0, midY);
CGPathAddLineToPoint(path, nil, midX - 5.0, midY);
CGPathAddLineToPoint(path, nil, midX, midY);
shakeAnimation.path = path;
CFRelease(path);
[self.view.layer addAnimation:shakeAnimation forKey:@"shakeAnimation"];
}
Спасибо,
Jon