整个代码块包含以下内容:
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 :(得分: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)
答案 1 :(得分:0)
嗨akishnani我遇到了同样的问题,在遭遇并搜索了所有内容之后,我发现了我最重要的 - (void)drawRect:(CGRect)rect
方法,并且它正在创建问题,它可以解决问题,如果还没有解决的话
-(void)drawRect:(CGRect)rect
{ [super drawRect:rect];
}
答案 2 :(得分:0)
这是一个非常古老的主题,但发现的是限制屏幕截图的高度。
我指定了一个上限(4000 CGFloat),如果我必须截取的内容超过了这个,我会按照上限截取屏幕截图。
这有助于减少内存错误的再次发生。