关闭屏幕内容捕获UIScrollView

时间:2011-04-10 11:11:49

标签: objective-c ios 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);

此捕获很好,包括所有子视图。问题是,一旦我进行了屏幕截图,我的滚动视图就会变得无法响应,因此我无法再滚动(或者如果处于纵向模式,则横向平移)。如果我旋转设备,问题似乎纠正自己,我可以正常滚动和平移。 我确定我错过了一些非常简单的东西,以便在拍摄屏幕截图后让我的滚动视图正常工作。 任何建议都非常感谢!

1 个答案:

答案 0 :(得分:3)

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

CGRect oldFrame = mainScrollView.frame;

// do your logic to screenshot

mainScrollView.frame = oldFrame;