截屏方法有很多中,这里只写一种最简单的,以及什么样的情况下用什么参数
具体的主要函数如下:
UIGraphicsBeginImageContextWithOptions(self.view.bounds.size, YES, 0);
[self.view.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
第一个函数:
UIGraphicsBeginImageContextWithOptions(CGSize size, BOOL opaque, CGFloat scale)
size 画布的大小
opaque 是否有透明度
scale 画布的比率,这个参数关系到当前所截图片的清晰度一般设置为当前屏幕的比率 [UIScreen mainScreen].scale
如果不关心这些,也可以直接使用
UIGraphicsBeginImageContext(self.view.bounds.size)
但涉及到分享的时候最好使用options函数;
封装了一下,具体写法:
+ (UIImage*)mcScreenShotWithObject:(id)target
shotSize:(CGSize)size
isOpaque:(BOOL)opaque
isSave:(BOOL)isSave
saveName:(NSString*)name{
UIGraphicsBeginImageContextWithOptions(size, opaque, [UIScreen mainScreen].scale);
if ([target isKindOfClass:[UIView class]]) {
UIView *view = (UIView*)target;
[view.layer renderInContext:UIGraphicsGetCurrentContext()];
}else if ([target isKindOfClass:[UIViewController class]]){
UIViewController *viewController = (UIViewController*)target;
[viewController.view.layer renderInContext:UIGraphicsGetCurrentContext()];
}else{
NSAssert([target isKindOfClass:[UIView class]] || [target isKindOfClass:[UIViewController class]], @"数据源有问题,请检查并更新!");
}
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
if (isSave) {
NSString * filePath = [NSHomeDirectory() stringByAppendingPathComponent:@"DocumentPath"];
NSFileManager *fileManager = [NSFileManager defaultManager];
[fileManager createDirectoryAtPath:filePath withIntermediateDirectories:YES attributes:nil error:nil];
[fileManager createFileAtPath:[filePath stringByAppendingPathComponent:[NSString stringWithFormat:@"/%@.png",(name && ![name isEqualToString:@""])?name:@"image"]] contents:UIImagePNGRepresentation(image) attributes:nil];
NSLog(@"====>>%@ Path:%@%@",(name && ![name isEqualToString:@""])?name:@"image", filePath,[NSString stringWithFormat:@"/%@.png",(name && ![name isEqualToString:@""])?name:@"image"]);
}
return image;
}