2012-03-14 60 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),如果我不得不截圖的內容超過這個限制,我會截取截圖的上限。

這幫助我減少了內存錯誤的重複發生。