我有一个问题,但似乎无法解决。我试图截取UIScrollView(包括屏幕外的内容)的屏幕截图,但当视图很长时,renderInContext无法获取滚动视图的所有内容。生成的图像尺寸是正确的,但渲染的数据似乎缺少显示块,留下应该存在这些块的白色空间。缺失的块来自UIWebView中的内容,我认为它被设置为“scaleToFit”。这种情况不会一直发生,只有当UIWebView的高度相当大时才会出现。这使我想到它与UIWebView的缩放有关。
如果我调整下面的coreLayer.bounds CGRECT,则会得到不同的结果,有时缺失的块位于底部,有时位于图像中间。
我从这个问题的最佳答案开始编写代码,当我注意到截断问题时,我将其修改为以下内容:
如果我调整下面的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();
裁剪调整有所帮助(通过一些视图进行修复),但当UIScrollView非常长时,仍然会被裁剪。我已经在解决这个问题上工作了一段时间,但似乎找不到解决方法。您有任何建议吗?是否有人遇到过这个问题?
请帮忙!