我有一个UIScrollView
实现 takeScreenshot 方法的后代,如下所示:
-(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)。
是否可以获取快照UIScrollView
,包括不在屏幕上的区域?或者我是否需要向下滚动视图,拍摄第二张照片并将它们拼接在一起?
这是有效的代码...
- (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 中打开它。这显然只适用于模拟器:-)
完成项目于ScrollViewScreenShot Github 存储库 http://github.com/st3fan/iphone-experiments/tree/master/Miscellaneous/ScrollViewScreenShot/
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)