想要把UIView或者他的子控件(比如UIImageView)上面的东西给绘制到上下文当中,必须得要使用渲染(描绘)的方式.[^self.view.layer renderInContext:]
- 截屏最关键的2个方法,一个是addClip 另一个是 renderInContext;
//把控制器的View生成一张图片
//1.开启一个位图上下文(跟当前控制器View一样大小的尺寸)
// 是不是不是透明 No表示上下文透明,可以渲染画板底下的东西
UIGraphicsBeginImageContextWithOptions(self.view.bounds.size, NO, 0);
//把ImageV绘制到上下文之前,设置一个裁剪区域
UIBezierPath *clipPath = [UIBezierPath bezierPathWithRect:self.coverV.frame];
[clipPath addClip];
//把把控制器的View绘制到上下文当中.(GetCurrent不是uiview别自己搞错了)
//2.想要把UIView或者他的子控件(比如UIImageView)上面的东西给绘制到上下文当中,必须得要使用渲染(描绘)的方式.
CGContextRef ctx = UIGraphicsGetCurrentContext();
[self.view.layer renderInContext:ctx];
//[self.view.layer drawInContext:ctx];
//3.从上下文当中生成一张图片
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
//4.关闭上下文
UIGraphicsEndImageContext();
//把生成的图片写入到桌面(文件方式进行传输:二进制流NSData)
//把图片转成二进制流NSData
//NSData *data = UIImageJPEGRepresentation(newImage, 1);
NSData *data = UIImagePNGRepresentation(newImage);
[data writeToFile:@"/Users/xiaomage/Desktop/newImage.png" atomically:YES];