2016-11-29 275 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(); 

我已经尝试了所有可能找到一个解决方案最近两天的代码。但不能。

该函数在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

在这里你正在获取主屏幕截图。我想获取imageview截图。此图像视图可以滚动并且图像高度= 6000和宽度= 6000+。 –

+0

我用UIImageView 6000x6000测试过它,它在模拟器上工作正常。请记住,存储6Kx6K图像所需的内存为144MB - Xcode的内存使用情况监视器在渲染视图层次结构时达到了1GB以上的峰值。 – norders