iPhone:如何在使用3d图层转换时以编程方式拍摄屏幕截图

时间:2010-11-25 00:36:17

标签: iphone rotation screenshot transform layer

我正在尝试以编程方式将当前视图的图像保存到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变换会丢失,例如对象出现在保存的图像中,就像没有应用任何三维变换一样。有没有办法以编程方式获取包含三维变换的屏幕截图?

UIGetScreenImage()不是一个选项,因为它是一个私有API,这个应用程序将转到应用程序商店。

1 个答案:

答案 0 :(得分:1)

我认为目前无法完成,因为renderInContext不会渲染Core Animation变换,UIGetScreenImage()也不是公共API,正如您所指出的那样。 StackOverflow上已经提出了同样的问题:

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

2)CALayer renderInContext

如果该功能对您的应用程序至关重要,我会考虑使用OpenGL视图并捕获颜色缓冲区(如果您不想显示它,可以在屏幕外渲染)。