2011-04-10 49 views
5

我用它可以在任一方向使用,并包含许多子视图的一个UIScrollView工作:捕获的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); 

这个捕获很好,包括所有子视图。问题是,一旦我制作了屏幕截图,我的滚动视图变得无法响应,因此我无法再滚动(或在纵向模式下横向移动)。如果我旋转设备,问题似乎自行解决,我可以正常滚动和平移。 我敢肯定,我错过了一些非常简单的事情,这是让屏幕截图拍摄后我的滚动视图正常工作所必需的。 任何建议非常感谢!

+0

我应该添加,以防万一它是相关的,这是一个iPad应用程序。 – beev 2011-04-10 11:15:27

回答

3

问题是,您设置的框架大小等于内容大小。当帧大小等于或大于内容大小时,您将无法滚动。 您必须找到一种方法来确定屏幕截图何时完成,并将框架大小更改为以前的大小。所以:

CGRect oldFrame = mainScrollView.frame; 

// do your logic to screenshot 

mainScrollView.frame = oldFrame; 
+0

修复了它。非常感谢! – beev 2011-04-10 15:28:10