【发布时间】:2012-04-17 06:49:40
【问题描述】:
我有一个似乎无法解决的问题。我正在尝试截取 UIScrollView 的屏幕截图(包括屏幕外内容),但是当视图很长时,renderInContext 不会获得滚动视图的所有内容。生成的图像尺寸是正确的,但渲染的数据似乎缺少显示的块,在这些块应该存在的地方留下空白。缺少的块来自 UIWebView 中的内容,我相信它设置为“scaleToFit”。它不会每次都发生,它似乎只在 UIWebView 的高度相当大时发生。这让我觉得这与 UIWebView 的缩放有关。
如果我调整下面的 coreLayer.bounds CGRECT,我会得到不同的结果,有时缺失的块在底部,有时它们在图像的中间。
我从question 接受的答案中的代码开始,当我注意到截止问题时,我将其修改为以下内容:
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();
截止调整有帮助(用一些视图修复了它)但是当 UIScrollView 相当长时它仍然会被截止。我已经为此工作了一段时间,似乎无法找到解决方法。你有什么建议吗?有人遇到过这个问题吗?
请帮忙!
【问题讨论】:
-
只是一个想法,但您是否考虑过暂时将 scrollView.frame.size 更改为 scrollView.contentSize?这将要求表格视图加载所有单元格,因为它们适合框架(表格视图将内容缓存在其框架之外,而不是在屏幕之外)。
标签: iphone objective-c ios uiscrollview screenshot