gpt4 book ai didi

graphics - "renderInContext:"和 CATransform3D

转载 作者:行者123 更新时间:2023-12-03 06:25:31 27 4
gpt4 key购买 nike

我有一个 View ,里面有多个 View ,还有一个图像演示(又名“封面流”)......而且我需要以编程方式制作屏幕截图!

因为文档说“renderInContext:”不会渲染 3d 动画:

“重要此方法的 Mac OS X v10.5 实现不支持整个 Core Animation 合成模型。QCCompositionLayer、CAOpenGLLayer 和 QTMovieLayer 图层不会渲染。此外,不会渲染使用 3D 变换的图层,也不会渲染指定背景过滤器、过滤器、合成过滤器或 mask 值的图层。Mac OS X 的 future 版本可能会添加对渲染这些图层和属性的支持。”

来源:https://developer.apple.com/library/mac/#documentation/graphicsimaging/reference/CALayer_class/Introduction/Introduction.html

我搜索了很多,我的“最佳”解决方案(一点也不好)是创建我自己的CGContext并将所有CG动画记录到其中。但我真的不想这样做,因为我需要重新编写大部分动画代码,这对内存来说非常昂贵......我找到了其他解决方案(其中一些是不可修改的),例如使用 openGL 或通过捕获AVSessions,但没有人可以帮助我...

我有什么选择?有这个问题吗?

感谢您的宝贵时间!

最佳答案

你真的尝试过吗?我目前正在开发一个具有多个 3D 变换的项目,当我尝试以编程方式制作此屏幕截图时,它工作得很好:)这是我使用的代码:

-(UIImage *)getScreenshot
{
CGFloat scale = 1.0;
if([[UIScreen mainScreen]respondsToSelector:@selector(scale)])
{
CGFloat tmp = [[UIScreen mainScreen]scale];
if (tmp > 1.5)
{
scale = 2.0;
}
}
if(scale > 1.5)
{
UIGraphicsBeginImageContextWithOptions(self.frame.size, NO, scale);
}
else
{
UIGraphicsBeginImageContext(self.frame.size);
}
//SELF HERE IS A UIVIEW
[self.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *screenshot = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

return screenshot;
}

关于graphics - "renderInContext:"和 CATransform3D,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9530250/

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