在iOS 4中保存UIView内容,内部图像的实际大小(即缩放比例保存)

Mar*_*rov 10 iphone calayer uiview ios4 retina-display

我有一个带有许多UIImageViews的UIView作为子视图.该应用程序在iOS4上运行,我使用具有视网膜显示分辨率的图像(即图像加载时刻度= 2)

我想要保存UIView的内容......但是...内部有真实的图像大小.即视图的大小为200x200,内部有scale = 2的图像,我想保存400x400的结果图像和所有图像的实际大小.

现在首先想到的是创建一个新的图像上下文并再次加载scale = 1的内部所有图像,这应该做,但我想知道是否有更优雅的方法来做到这一点?看起来像是内存的腰部和处理器时间再次重新加载一切,因为它已经完成了......

ps如果有人有答案 - 包括代码会很好

Prc*_*ela 25

用于渲染任何UIView图像的实现(也用于视网膜显示).

helper.h文件:

@interface UIView (Ext) 
- (UIImage*) renderToImage;
@end
Run Code Online (Sandbox Code Playgroud)

和helper.m文件中的所有实现:

#import <QuartzCore/QuartzCore.h>

@implementation UIView (Ext)
- (UIImage*) renderToImage
{
  // IMPORTANT: using weak link on UIKit
  if(UIGraphicsBeginImageContextWithOptions != NULL)
  {
    UIGraphicsBeginImageContextWithOptions(self.frame.size, NO, 0.0);
  } else {
    UIGraphicsBeginImageContext(self.frame.size);
  }

  [self.layer renderInContext:UIGraphicsGetCurrentContext()];
  UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
  UIGraphicsEndImageContext();  
  return image;
}
Run Code Online (Sandbox Code Playgroud)

0.0是比例因子.要应用于位图的比例因子.如果指定值0.0,则比例因子将设置为设备主屏幕的比例因子.

QuartzCore.framework也应放入项目中,因为我们在图层对象上调用函数.

要在UIKit框架上启用弱链接,请单击左侧导航器中的项目项,单击项目目标 - >构建阶段 - >链接二进制文件,然后在UIKit框架上选择"可选"(弱)类型.

这里是UIColor,UIImage,NSArray,NSDictionary等类似扩展的.