Iphone 您如何修复丢失的“;积木;在iOS设备上拍摄屏幕截图时的数据量?
我有一个似乎无法解决的问题。我试图拍摄UIScrollView的屏幕截图(包括屏幕外内容),但当视图很长时,RenderContext无法获取滚动视图的所有内容。生成的图像尺寸是正确的,但渲染数据似乎缺少显示的块,在这些块应该存在的地方留下了空白。缺少的块来自UIWebView中的内容,我认为它设置为“scaleToFit”。这种情况并非每次都发生,似乎只有当UIWebView的高度相当大时才会发生。这让我觉得这和UIWebView的缩放有关Iphone 您如何修复丢失的“;积木;在iOS设备上拍摄屏幕截图时的数据量?,iphone,objective-c,ios,uiscrollview,screenshot,Iphone,Objective C,Ios,Uiscrollview,Screenshot,我有一个似乎无法解决的问题。我试图拍摄UIScrollView的屏幕截图(包括屏幕外内容),但当视图很长时,RenderContext无法获取滚动视图的所有内容。生成的图像尺寸是正确的,但渲染数据似乎缺少显示的块,在这些块应该存在的地方留下了空白。缺少的块来自UIWebView中的内容,我认为它设置为“scaleToFit”。这种情况并非每次都发生,似乎只有当UIWebView的高度相当大时才会发生。这让我觉得这和UIWebView的缩放有关 如果我调整Calelayel.Engult CGRC
如果我调整Calelayel.Engult CGRCUT,我得到不同的结果,有时丢失的块在底部,有时它们在图像的中间。p> 我从这个公认答案的代码开始,当我注意到截止问题时,我将其修改为以下内容:
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相当长时,它仍然会被截断。我在这方面工作了一段时间,似乎找不到解决办法。你有什么建议吗?有没有人遇到过这个问题
请帮忙 您的滚动视图是表格视图吗?如果是这样的话,由于细胞的重复使用,实际上只有屏幕上的内容存在。即使它是一个常规的滚动视图,操作系统也可以通过不渲染滚动视图的一些屏幕外元素来进行优化。如果这是真的,您可以通过编程方式一次滚动一个屏幕,并在正确的位置将每个屏幕渲染到您的上下文中来实现这一点。。我发现通常一次可以看到3个“块”。然后在滚动UIScrollView时,根据滚动方向重新绘制内容。因此,我正在拍摄3个面板区域的屏幕截图,将其滚动到下一个可查看的3个面板,等等。我要提醒您确保您的代码没有硬编码的数字3。屏幕外绘制的行数可能是一个实施细节,可能会随着新的操作系统版本而改变,甚至在其他设备上有所不同,这取决于可用的RAM或GPU功能。这只是一个想法,但您是否考虑过暂时将scrollView.frame.size更改为scrollView.contentSize?这将要求表格视图加载所有单元格,因为它们正在装入框架中(表格视图将内容缓存在其框架之外,而不是屏幕之外)。