在iOS设备上截屏时,如何修复丢失的"数据块"?

thi*_*ity 5 iphone screenshot objective-c uiscrollview ios

我有一个我似乎无法解决的问题.我试图拍摄UIScrollView的屏幕截图(包括屏幕外内容),但是当视图很长时,renderInContext不会获得滚动视图的所有内容.生成的图像尺寸是正确的,但渲染的数据似乎缺少显示器的块,留下那些块应该是的空白区域.丢失的块来自UIWebView中的内容,我认为它设置为"scaleToFit".它不会每次都发生,它似乎只发生在UIWebView的高度相当大的时候.这让我觉得与UIWebView的缩放有关.

如果我调整coreLayer.bounds CGRECT,我会得到不同的结果,有时丢失的块位于底部,有时它们位于图像的中间.

我从这个问题的接受答案中开始使用代码,当我注意到截止问题时,我将其修改为以下内容:

UIGraphicsBeginImageContext(scrollView.contentSize);
{
    CGPoint savedContentOffset = scrollView.contentOffset;
    CGRect savedFrame = scrollView.frame;


    //hide the scroll bars
    [scrollView setShowsHorizontalScrollIndicator:NO];
    [scrollView setShowsVerticalScrollIndicator:NO];


    scrollView.contentOffset = CGPointZero;
    scrollView.frame = CGRectMake(0, 0, scrollView.contentSize.width, scrollView.contentSize.height);
    //adjust layer for cut-off
    CALayer *coreLayer = scrollView.layer;
    coreLayer.bounds = CGRectMake(0, 0, scrollView.contentSize.width, scrollView.contentSize.height);
    [coreLayer renderInContext: UIGraphicsGetCurrentContext()]; 
    //[scrollView.layer renderInContext: UIGraphicsGetCurrentContext()];
    image = UIGraphicsGetImageFromCurrentImageContext();

    scrollView.contentOffset = savedContentOffset;
    scrollView.frame = savedFrame;


    //reset the scroll bars to default
    [scrollView setShowsHorizontalScrollIndicator:YES];
    [scrollView setShowsVerticalScrollIndicator:YES];
}
UIGraphicsEndImageContext();
Run Code Online (Sandbox Code Playgroud)

截止调整有助于(用一些视图修复它)但当UIScrollView相当长时它仍然被截止.我一直在研究这个问题,似乎无法找到解决办法.你有什么建议吗?有没有人遇到过这个问题?

请帮忙!

Zev*_*erg 0

你的滚动视图是表格视图吗?如果是这样,由于单元格重用,几乎只有屏幕上的内容实际存在。即使它是常规滚动视图,操作系统也可能通过不渲染滚动视图的一些屏幕外元素来进行优化。如果这是真的,您可以通过以编程方式一次滚动一屏并将每个屏幕渲染到您的上下文中的正确位置来使其工作。