【问题标题】:iPhone: how to take screen shots programmatically when using 3d layer transformationsiPhone:使用 3d 图层转换时如何以编程方式截取屏幕截图
【发布时间】:2010-11-25 00:36:17
【问题描述】:

我正在尝试以编程方式将当前视图的图像保存到 UIImage。 当前视图包含一个背景,以及许多对图层应用了 3d 转换的 UIImageView,例如

CATransform3D t = CATransform3DIdentity;
t = CATransform3DRotate(t, rotationX, 1.0, 0, 0);
t = CATransform3DRotate(t, rotationY, 0, 1.0, 0);
object.layer.transform = t;

我目前正在使用以下代码抓取当前视图的屏幕截图:

UIGraphicsBeginImageContext(background.bounds.size);
[background.window.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

但是,对象上的 3d 变换会丢失,例如对象出现在保存的图像中,就好像没有应用 3d 变换一样。有没有办法以编程方式抓取包含 3d 转换的屏幕截图?

UIGetScreenImage() 不是一个选项,因为它是一个私有 API,并且此应用将进入应用商店。

【问题讨论】:

标签: iphone rotation screenshot transform layer


【解决方案1】:

我认为目前无法完成,因为 renderInContext 不渲染核心动画转换,并且 UIGetScreenImage() 不是公共 API,正如您所指出的那样。 StackOverflow 上已经问过同样的问题:

1) How do I create/render a UIImage from a 3D transformed UIImageView?

2) CALayer renderInContext

如果该功能是您的应用程序的关键,我会考虑使用 OpenGL 视图并捕获颜色缓冲区(如果您不想显示,可以将其渲染到屏幕外)。

【讨论】:

    猜你喜欢
    • 2011-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-18
    相关资源
    最近更新 更多