2012-03-14 8 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(); 

EDIT:アプリはまだクラッシュされると言います。

QuartzCore frameworkを追加していない可能性がありますか?

QuartzCore headerをインポートする必要がありますも:akishnaniこんにちは

#import <QuartzCore/QuartzCore.h> 

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

+0

あなたの提案を試みましたが、UIGraphicsBeginImageContextWithOptions(webview.bounds.size、YES、0.0);でもクラッシュしました。インスツルメーションのメモリモニタは、メモリエラーとフラグを立ててアプリケーションを終了します。これは間違いなくメモリの問題です。 – akishnani

+0

@akishnani:私の編集された答えを見てください:それは理由でしょうか?またリンクされたQ&Aを見てください。 –

+0

サイコロはありません。私はヘッダとフレームワークを含んでいました。 – akishnani

0

から私が苦しんでた後、同じ問題を持っていたと私はちょうど私が上書きされたことが判明、すべてググ - 、(void)drawRect:(CGRect)rect方法それは問題を作成していた、まだ解決されていない場合は、問題を解決する可能性があります。

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

かなり古いスレッドですが、スクリーンショットの高さを制限することができます。

私は上限(4000CGFloat)を指定しました。これを超えるスクリーンショットを取らなければならない場合は、スクリーンショットを上限でトリミングします。

これは、メモリエラーの再発を減らすのに役立ちました。