捕捉UIScrollView屏幕外的内容

5

我正在使用UIScrollView,它可以用于任何方向,并包含许多子视图:

// in viewDidLoad

mainScrollView = (UIScrollView *)self.view;

mainScrollView.contentSize = CGSizeMake(1024, 1432);

我想要截取整个滚动视图及其所有子视图的屏幕截图,包括当前屏幕上不可见的内容。以下代码仅能截取当前屏幕上可见的内容:
// make screenshot

 UIGraphicsBeginImageContext(mainScrollView.bounds.size);

 [mainScrollView.layer renderInContext:UIGraphicsGetCurrentContext()];

 UIImage *screenImg = UIGraphicsGetImageFromCurrentImageContext();

 UIGraphicsEndImageContext();



 // save screenshot in docs dir

 NSData *pngData = UIImagePNGRepresentation(screenImg);

 NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);

 NSString *documentsDir = [paths objectAtIndex:0];

 [pngData writeToFile:[documentsDir stringByAppendingPathComponent:@"screen1.png"] 

                 options:NSDataWritingAtomic error:nil];

在截图之前,添加以下内容是我找到的唯一能够捕捉整个滚动视图的方法:

 // capture off-screen content

 mainScrollView.frame = CGRectMake(0, 0, 1024, 1432);

这个截图很好,包括了所有的子视图。问题是,一旦完成截屏,我的滚动视图就变得无响应了,所以我不能再滚动(或在纵向模式下横向滑动)。如果我旋转设备,问题似乎会自行解决,然后我就可以正常地滚动和平移。

我确定我漏掉了一些非常简单的东西,需要在截屏之后让我的滚动视图正常工作。

非常感谢任何建议!


我应该补充一下,以防有关系,这是一个iPad应用程序。 - beev
1个回答

3

问题在于您将框架大小设置为内容大小。当框架大小等于或大于内容大小时,您无法滚动。

您需要找到一种方法来确定屏幕截图何时完成,并将框架大小更改回先前的大小。因此:

CGRect oldFrame = mainScrollView.frame;

// do your logic to screenshot

mainScrollView.frame = oldFrame;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接