2

我正在尝试以编程方式将当前视图的图像保存到 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,这个应用程序将进入应用程序商店。

4

1 回答 1

1

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

1)如何从 3D 转换的 UIImageView 创建/渲染 UIImage?

2) CALayer 渲染上下文

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

于 2010-11-25T02:14:32.327 回答