获取UIScrollView的屏幕截图,包括屏幕外部分 [英] Getting a screenshot of a UIScrollView, including offscreen parts
问题描述
我有一个 UIScrollView
decendent实现了一个看起来像这样的takeScreenshot方法:
I have a UIScrollView
decendent that implements a takeScreenshot method that looks like this:
-(void)takeScreenshot {
CGRect contextRect = CGRectMake(0, 0, 768, 1004);
UIGraphicsBeginImageContext(contextRect.size);
[self.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
// do something with the viewImage here.
}
这基本上会移动到滚动视图的顶部,并截取可见区域。当iPad面向人像时,它可以正常工作,但当它处于横向时,图像的底部会被切断(因为可见区域的高度仅为748,而不是1004)。
This basically moves to the top of the scroll view, and takes a screenshot of the visible area. It works fine when the iPad is oriented portrait, but when it's in landscape the bottom of the image is cut off (as the height of the visible area is only 748, not 1004).
是否可以获得 UIScrollView
的快照,包括不在屏幕上的区域?或者我是否需要向下滚动视图,拍摄第二张照片并将它们拼接在一起?
Is it possible to get a snapshot of the UIScrollView
, including areas not on screen? Or do I need to scroll the view down, take a second photo and stitch them together?
推荐答案
这是有效的代码。 ..
Here is code that works ...
- (IBAction) renderScrollViewToImage
{
UIImage* image = nil;
UIGraphicsBeginImageContext(_scrollView.contentSize);
{
CGPoint savedContentOffset = _scrollView.contentOffset;
CGRect savedFrame = _scrollView.frame;
_scrollView.contentOffset = CGPointZero;
_scrollView.frame = CGRectMake(0, 0, _scrollView.contentSize.width, _scrollView.contentSize.height);
[_scrollView.layer renderInContext: UIGraphicsGetCurrentContext()];
image = UIGraphicsGetImageFromCurrentImageContext();
_scrollView.contentOffset = savedContentOffset;
_scrollView.frame = savedFrame;
}
UIGraphicsEndImageContext();
if (image != nil) {
[UIImagePNGRepresentation(image) writeToFile: @"/tmp/test.png" atomically: YES];
system("open /tmp/test.png");
}
}
最后几行只是将图像写入/ tmp /test.png然后在Preview.app中打开它。这显然只适用于模拟器: - )
The last few lines simply write the image to /tmp/test.png and then opens it in Preview.app. This obviously only works on in the Simulator :-)
ScrollViewScreenShot Github存储库
这篇关于获取UIScrollView的屏幕截图,包括屏幕外部分的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!