我按照说明here捕捉动画期间的截图(我正在尝试使用动画标签录制UIView以将其捕捉为视频)
这是我的ViewController(getframe)中的屏幕截图代码
-(UIImage*) getCurrentFrame {
UIGraphicsBeginImageContext(self.view.bounds.size);
CGContextRef mycontext = UIGraphicsGetCurrentContext();
[[[self.view layer] presentationLayer] renderInContext:mycontext];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return image;
}
当我尝试制作屏幕截图的视频时,我反复只看到开始帧 - 因为我的线程(使用AVAssetwriter示例)抓取后续屏幕截图屏幕抓取动作。在一个while循环中使用block的AVAssetWriterInput期间调用screengrab。
我的动画是标签上的简单核心动画 - 向下滚动示例
mTextLabel.frame = CGRectMake(mTextLabel.frame.origin.x,
-100,
mTextLabel.frame.size.width,
mTextLabel.frame.size.height);
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration: delay];
[UIView setAnimationTransition:UIViewAnimationTransitionNone
forView:mTextLabel cache:YES];
mTextLabel.frame = CGRectMake(mTextLabel.frame.origin.x,
240,
mTextLabel.frame.size.width,
mTextLabel.frame.size.height);
[UIView commitAnimations];
我尝试使用块动画animatewithDuration替换旧的学校动画但得到相同的结果
有什么建议吗? 使用ios 6和最新的xcode(正确导入Quartzcore)
Apple开发中心said可能无法捕获某些内容。
是另一种选择,可以使用计时器暂停动画并间歇性地抓取屏幕(必须手动编码动画)?
答案 0 :(得分:3)
[view drawViewHierarchyInRect:self.view.bounds afterScreenUpdates:NO];
在Begin和End Graphics Context调用之间进行换行!
------------ iOS7前--------------- 来自Apple的CALayer文档here! 在renderInContext中,他们清楚地说
“重要:此方法的OS X v10.5实现不支持整个Core Animation组合模型。不会渲染QCCompositionLayer,CAOpenGLLayer和QTMovieLayer图层。此外,使用3D的图层不渲染变换,也不指定backgroundFilters,filters,compositingFilter或掩码值的图层。未来版本的OS X可能会添加对渲染这些图层和属性的支持。“
我唯一的选择是使用服务器端解决方案或通过在时间t手动覆盖转换来逐帧手动编码动画。