从包含其他视图的UIView导出高分辨率图像

时间:2012-07-19 14:26:32

标签: iphone objective-c ios xcode uiview

我正在尝试从包含UIImage视图和一些标签的UIView导出图像。我不确定我是以正确的方式做到这一点。我想导出视图中的所有内容并维护布局。我想以1536 x 2048出口。

我在renderInContext中使用以下代码来获取主视图(UIView)的图像。一种工作,但布局搞砸了,基本上布局改变,标签不能正确缩放。 renderInContext是正确的方法吗?还有更好的方法吗?

output

您可以在此处下载整个项目:http://tinyurl.com/7qvhqtp

UIGraphicsBeginImageContext(CGSizeMake(1536, 2048));
viewOutput.frame = CGRectMake(0, 0, 1536, 2048);
[[viewOutput layer] renderInContext:UIGraphicsGetCurrentContext()];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
UIImageWriteToSavedPhotosAlbum(image,nil,nil,nil);

2 个答案:

答案 0 :(得分:2)

这是我用来将当前UIView保存为图像的代码。布局得到了完美保存。

UIGraphicsBeginImageContextWithOptions(self.view.bounds.size, self.view.opaque, 0.0);
[self.view.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage * img = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

我不是百分百肯定,但UIGraphicsBeginImageContextUIGraphicsBeginImageContextWithOptions可能存在一些问题。

另一方面,如果您的视图将autoresizesSubviews设置为YES,则问题可能出现在您视图的子视图的自动调整掩码中。如果您不支持旋转,或者至少在更改视图框架之前,我会尝试禁用它。

答案 1 :(得分:1)

为了获得更大的图像,你唯一做的就是更改框架,但标签没有正确的自动调整大小的掩码,也没有改变它们的字体大小。您可以在“运行代码后”图像中清楚地看到标签既没有移动也没有改变尺寸。

首先,如果您想要在超视图的帧发生变化时改变它的帧(是图像的标签子视图?如果不是,您可能需要自己计算新的帧),那么您应该给它一个合适的auroresizing掩码。在您的情况下,您希望它与屏幕底部有一个固定的距离,并且距离顶部有一个灵活的距离。您还希望固定左右两侧的距离,以便宽度可以灵活。

这只会让您遇到字体大小问题。你应该计算比例因子(一切都变大了多少倍),并将当前字体大小乘以该比例因子。