2016-11-29 6 views
0

내 앱은 마크 업에 큰 이미지 (5MB)가 사용됩니다. 하지만 오류 메시지없이 앱이 다운됩니다. 다음은 내가 해결책을 지난 2 일을 찾기 위해 모든 가능성을 시도 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(); 

를 사용하는 코드입니다. 그러나 할 수 없었다.

이 기능은 UI 개체 아래에서 사용됩니다. 기본보기에는보기가 있고 내부에는 UIScrollView가 있으며 내부에는 UIScrollView에 UIImageView가 있습니다. 그래서이 UIImageView screenshoto 얻이 필요가있다. 이보기를 사용하여 이미지보기를 스크롤하고 마크 업합니다. 이 충돌에 대한 아이디어가 있습니까?

+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

여기에서는 메인 스크린 스크린 샷을 얻고 있습니다. 나는 imageview screenshot을 얻고 싶다. 그리고이 이미지 뷰는 스크롤 가능하고 이미지 높이 = 6000 및 너비 = 6000+ 일 수 있습니다. –

+0

UIImageView 6000x6000 함께 테스트하고 시뮬레이터에서 제대로 작동합니다. 6Kx6K 이미지를 저장하는 데 필요한 메모리는 144MB입니다. Xcode의 메모리 사용량 모니터는 뷰 계층 구조를 렌더링하는 동안 1GB가 넘었습니다. – norders