2016-11-29 3 views
0

私のアプリはマークアップに大きな画像(5MB)が使われています。しかし、アプリケーションはエラーメッセージなしでクラッシュしています。以下は は私がdrawViewHierarchyInRectのアプリケーションクラッシュ

 UIGraphicsBeginImageContext(CGSizeMake(_drawingUV.drawingImgView.image.size.width, _drawingUV.drawingImgView.image.size.height)); 
     { 
       CGContextRef context = UIGraphicsGetCurrentContext(); 

      if ([_drawingUV.drawingImgView respondsToSelector:@selector(drawViewHierarchyInRect:afterScreenUpdates:)]) 
      { 
       [_drawingUV.drawingImgView drawViewHierarchyInRect:_drawingUV.drawingImgView.bounds afterScreenUpdates:YES]; 
      } 
      else 
      { 
       [_drawingUV.drawingImgView.layer renderInContext:context]; 
      } 
      screenShot = UIGraphicsGetImageFromCurrentImageContext(); 
     } 
     UIGraphicsEndImageContext(); 

を使用したコードである私は最後の2日間解決策を見つけるために、すべての可能性を試してみました。しかし、できませんでした。

この機能は、UIオブジェクトの下で使用されます。 メインビューにはビューがあり、内部にはUIScrollViewがあり、内部にUIScrollViewにはUIImageViewがあります。だから私はこのUIImageViewのスクリーンショットを取得する必要があります。これらのビューを使用して、画像ビューをスクロールしてマークアップします。 このクラッシュは何ですか?

+0

あなたは外括弧「{...}を」削除しようとしたことがありますか?また、本当に 'renderInContext'(iOS 6以下)をサポートする必要がありますか? – norders

+0

はい。私は試した。 renderInContextは削除できます。この画像ビューはスクロール可能で、画像の高さは6000、幅は6000+です。 –

答えて

0

私はこれを問題にせずにすべての時間を使用します。

- (UIImage *)screenshot { 
    UIWindow *mainWindow = [[UIApplication sharedApplication] keyWindow]; 

    UIGraphicsBeginImageContextWithOptions(mainWindow.bounds.size, NO, 1.0); 
    [mainWindow drawViewHierarchyInRect:mainWindow.bounds afterScreenUpdates:NO]; 
    UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 

    return image; 
} 
+0

ここでメイン画面のスクリーンショットが表示されます。私はイメージビューのスクリーンショットを取得したい。また、この画像ビューはスクロール可能で、画像の高さは6000、幅は6000+です。 –

+0

私はUIImageView 6000x6000でそれをテストし、シミュレータ上で正常に動作します。 6Kx6Kイメージを保存するために必要なメモリは144MBであることを覚えておいてください。 - Xcodeのメモリ使用量モニタは、ビュー階層のレンダリング中に1GBを超えるピークに達しました。 – norders

関連する問題