Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 您如何修复丢失的“;积木;在iOS设备上拍摄屏幕截图时的数据量?_Iphone_Objective C_Ios_Uiscrollview_Screenshot - Fatal编程技术网

Iphone 您如何修复丢失的“;积木;在iOS设备上拍摄屏幕截图时的数据量?

Iphone 您如何修复丢失的“;积木;在iOS设备上拍摄屏幕截图时的数据量?,iphone,objective-c,ios,uiscrollview,screenshot,Iphone,Objective C,Ios,Uiscrollview,Screenshot,我有一个似乎无法解决的问题。我试图拍摄UIScrollView的屏幕截图(包括屏幕外内容),但当视图很长时,RenderContext无法获取滚动视图的所有内容。生成的图像尺寸是正确的,但渲染数据似乎缺少显示的块,在这些块应该存在的地方留下了空白。缺少的块来自UIWebView中的内容,我认为它设置为“scaleToFit”。这种情况并非每次都发生,似乎只有当UIWebView的高度相当大时才会发生。这让我觉得这和UIWebView的缩放有关 如果我调整Calelayel.Engult CGRC

我有一个似乎无法解决的问题。我试图拍摄UIScrollView的屏幕截图(包括屏幕外内容),但当视图很长时,RenderContext无法获取滚动视图的所有内容。生成的图像尺寸是正确的,但渲染数据似乎缺少显示的块,在这些块应该存在的地方留下了空白。缺少的块来自UIWebView中的内容,我认为它设置为“scaleToFit”。这种情况并非每次都发生,似乎只有当UIWebView的高度相当大时才会发生。这让我觉得这和UIWebView的缩放有关

如果我调整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?这将要求表格视图加载所有单元格,因为它们正在装入框架中(表格视图将内容缓存在其框架之外,而不是屏幕之外)。