gpt4 book ai didi

objective-c - 使用 renderincontext of presentationlayer 的屏幕截图不起作用

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:05:44 24 4
gpt4 key购买 nike

我按照说明操作 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 示例)抓取后续屏幕截图,屏幕抓取中没有任何移动。截屏在 AVAssetWriterInput usingblock 期间在 while 循环中被调用。

我的动画是标签上的一个简单的核心动画——向下滚动示例

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];

我尝试用 block 动画 animatewithDuration 替换旧式动画,但得到了相同的结果

有什么建议吗?使用 ios 6 和最新的 xcode(已正确导入 Quartzcore)

Apple 开发中心 said有些东西可能不会被捕获。

是否有另一种选择可以使用计时器和间歇性抓取屏幕(必须手动编写动画)来制作动画?

最佳答案

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

[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 的层不渲染转换,也不渲染指定背景过滤器、过滤器、合成过滤器或掩码值的图层。 future 版本的 OS X 可能会添加对渲染这些图层和属性的支持。”

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

关于objective-c - 使用 renderincontext of presentationlayer 的屏幕截图不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14107327/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com