2012-03-14 46 views
4

整个代码块由以下部分组成:最大大小的屏幕截图(存储器缓冲器)

CGSize layerSize = [webview sizeThatFits:CGSizeZero]; 

if ([UIScreen instancesRespondToSelector:@selector(scale)] && [[UIScreen mainScreen] scale] == 2.0f) { 
    UIGraphicsBeginImageContextWithOptions(layerSize, NO, 2.0f); 
} 
else { 
     UIGraphicsBeginImageContext(layerSize); 
} 

[webview.layer renderInContext:UIGraphicsGetCurrentContext()]; 

screenshot = UIGraphicsGetImageFromCurrentImageContext(); 

UIGraphicsEndImageContext(); 

但经过测试,这条线是一个引起问题: [webview.layer renderInContext:UIGraphicsGetCurrentContext ()];

看起来像是一个内存崩溃,是否有基于设备(ipod,iphone,ipad)的最大尺寸(宽x高),此功能崩溃 - 似乎在视网膜显示器上非常长的页面会崩溃?

回答

0

我不认为内存问题导致您的问题。您应该使用void UIGraphicsBeginImageContextWithOptions(CGSize size,BOOL opaque,CGFloat scale);截图。最后一个参数设置为0.0将处理视网膜/非视网膜问题。 “

”适用于位图的比例因子,如果指定的值为0.0,则比例因子设置为设备主屏幕的比例因子。从documentation

UIGraphicsBeginImageContextWithOptions(webview.bounds.size, YES, 0.0); 
[webview.layer renderInContext:UIGraphicsGetCurrentContext()]; 
UIImage *screenshot = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 

编辑:你说你的应用程序仍然会崩溃。

是否有可能忘记添加QuartzCore framework

您还可以导入QuartzCore header

#import <QuartzCore/QuartzCore.h> 

Technical Q&A QA1703 (Screen Capture in UIKit Applications)

+0

我试过你的建议UIGraphicsBeginImageContextWithOptions(webview.bounds.size,YES,0.0);但仍然崩溃。仪器中的内存监视器将其标记为内存错误并关闭应用程序 - 所以这绝对是内存问题。 – akishnani 2012-03-14 23:06:11

+0

@akishnani:看到我编辑的答案:这可能是一个原因吗?也看看链接的问答 – 2012-03-15 09:59:07

+0

没有骰子 - 仍然崩溃,我已经包含了头文件和框架。 – akishnani 2012-03-15 21:22:33

0

嗨akishnani我有同样的问题,在已经遭受痛苦和一派一切,我刚发现我重写 - (void)drawRect:(CGRect)rect方法,它正在产生问题,如果还没有解决,它可能会解决问题。

-(void)drawRect:(CGRect)rect 
{ [super drawRect:rect]; 
} 
0

这是一个非常古老的线程,但是发现的是限制屏幕截图的高度。

我指定了一个上限(4000 CGFloat),如果我不得不截图的内容超过这个限制,我会截取截图的上限。

这帮助我减少了内存错误的重复发生。