3

我按照此处的说明在动画期间捕获屏幕截图(我正在尝试使用动画标签录制 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 示例)抓取后续屏幕截图,屏幕抓取中没有任何动作。在 AVAssetWriterInput 期间,在 while 循环中使用块调用 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)

苹果开发中心表示,有些东西可能不会被捕获。

是否有另一种选择使用计时器和间歇性抓取屏幕来上演动画(必须手动编码动画)?

4

1 回答 1

3

编辑-万岁!苹果终于添加了这个-

[view drawViewHierarchyInRect:self.view.bounds afterScreenUpdates:NO];

在开始和结束图形上下文调用之间换行!

------------ pre iOS7 --------------- 来自 Apple 的 CALayer 文档!在 renderInContext 他们清楚地说

“重要提示:此方法的 OS X v10.5 实现不支持整个 Core Animation 合成模型。不会渲染 QCCompositionLayer、CAOpenGLLayer 和 QTMovieLayer 图层。此外,不会渲染使用 3D 变换的图层,也不会渲染指定图层backgroundFilters、filters、compositingFilter 或掩码值。OS X 的未来版本可能会添加对渲染这些层和属性的支持。

对我来说唯一的选择是使用服务器端解决方案或通过在时间 t 手动覆盖转换来逐帧手动编码动画。

于 2013-02-03T21:13:47.013 回答