项目开发中,我们可能会遇到如下的应用场景:将一篇文章,进行截屏(需要全屏截取,包括滚动部分)后,分享到新浪微博、邮箱等等。前段时间,我在应用开发中实现了该功能,代码也是从网上找到的,自己整理了一下。主要实现截屏的方法如下所示:
1 // 实现页面的截图(包含滚动部分) 2 - (NSData *)getImageFromView:(UIView *)view 3 { 4 NSData *pngImg; 5 CGFloat max, scale = 1.0; 6 CGSize viewSize = [view bounds].size; 7 8 // 获取全屏的Size,包含可见部分和不可见部分(滚动部分) 9 CGSize size = [view sizeThatFits:CGSizeZero]; 10 11 max = (viewSize.width > viewSize.height) ? viewSize.width : viewSize.height; 12 if( max > 960 ) 13 { 14 scale = 960/max; 15 } 16 17 UIGraphicsBeginImageContextWithOptions(size,YES,scale); 18 19 // 设置view成全部展开效果 20 [view setFrame: CGRectMake(0, 0, size.width, size.height)]; 21 22 CGContextRef context = UIGraphicsGetCurrentContext(); 23 [view.layer renderInContext:context]; 24 pngImg = UIImagePNGRepresentation( UIGraphicsGetImageFromCurrentImageContext() ); 25 26 UIGraphicsEndImageContext(); 27 return pngImg; 28 }
使用的时候,我们可以用下面的代码:
1 // webView是页面的一个UIWebView控件,这里是实现webView的全屏截图,其他控件各位可以自行试验 2 NSData *imageData = [self getImageFromView:webView]; 3 [imageData writeToFile:[[NSHomeDirectory() stringByAppendingPathComponent:@"Documents"] stringByAppendingPathComponent:@"new.png"] atomically:YES];
【说明】:实现截图功能,需要引入QuartzCore.framework框架,并且添加如下头文件:
#include <QuartzCore/QuartzCore.h>