我正在使用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);
这个截图很好,包括了所有的子视图。问题是,一旦完成截屏,我的滚动视图就变得无响应了,所以我不能再滚动(或在纵向模式下横向滑动)。如果我旋转设备,问题似乎会自行解决,然后我就可以正常地滚动和平移。
我确定我漏掉了一些非常简单的东西,需要在截屏之后让我的滚动视图正常工作。
非常感谢任何建议!