以 3D 形式将 CATransformLayer 渲染为 PNG
Posted
技术标签:
【中文标题】以 3D 形式将 CATransformLayer 渲染为 PNG【英文标题】:Render CATransformLayer to PNG in 3D 【发布时间】:2014-06-25 05:17:57 【问题描述】:我正在尝试将包含多个 CAShapeLayer 的 CATransformLayer 渲染为 png 文件。我知道如何设置基本渲染并且确实有效。
虽然当我在 CATransformLayer 上调用 renderInContext 时,它会将所有内容展平为 2D 并完全忽略我的变换矩阵(旋转和/或透视)。
如何将我的 3d CATransformLayer 及其所有 CAShapeLayer 渲染为 PNG / UIImage?
【问题讨论】:
根据文档,renderInContext: 不渲染 3D 转换。问题:您是否只针对 ios 7 及更高版本? 嗯,我明白了。是的,我愿意。在 iOS 7 中是否有一种简洁的方法? 【参考方案1】:由于您只针对 iOS7 及更高版本,我建议您放弃 renderInContext:
并将其替换为 -[UIView drawViewHierarchyInRect:afterScreenUpdates:]
。你的代码可能看起来像这样:
UIGraphicsBeginImageContext(sizeOfYourImage);
[yourViewToRender drawViewHierarchyInRect:(CGRect)0, 0, sizeOfYourImage afterScreenUpdates:YES];
UIImage *renderedImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
【讨论】:
谢谢!让我开心:) 虽然知道一种无需先在屏幕上显示就可以渲染它的方法会很酷。 @Max 嗯,在使用此技术之前,您不必先在屏幕上显示视图。事实上,我刚刚做了一个测试项目,它呈现了一个视图层次结构,它没有作为子视图添加到任何其他视图,它工作得很好。 啊,太好了!这意味着我还可以渲染比屏幕更大的图像,这很好。您知道这种或其他技术是否适用于在应用了 3D 变换的情况下渲染为 PDF(用于矢量图形导出,将 CAShapeLayers 的 3D 层次结构渲染为 PDF)? 不幸的是,我对 iOS 上的 PDF 渲染不太熟悉,但我至少可以为您指出描述如何 generate PDF content 的文档。既然您知道如何从视图层次结构中获取 UIImage,我想如果您能找到一种方法将该图像呈现为 PDF,那么您就可以开始了。希望有帮助! 简而言之,终于可以使用 drawViewHierarchyInRect 捕获包含活动 CATransform3D 的图像。哇哦!以上是关于以 3D 形式将 CATransformLayer 渲染为 PNG的主要内容,如果未能解决你的问题,请参考以下文章
如何在 WPF 中使用 Xbim 以 3D 形式可视化 .IFC