跟系统申请,在内存中,临时创建一块空白的画布,然后,在这个临时的画布上,画图画字符串,绘制完成后,将临时的这块画布 保存成图片,再将图片放到视图上显示
关键点就是如何开启这块临时的画布?
UIGraphicsBeginImage xxxx
UIGraphicsEndImagexxxx
在这两句中间,编写与绘图有关的代码,曾经在drawRect方法中编写的代码都可以出现在begin和end之间,这个特殊的区间内,系统会自动返回临时的绘图上下文对象,于是所有的draw方法就都能使用了
- (void)viewDidLoad {
[super viewDidLoad];
// 重新绘制图片,生成圆形的内容.再显示到视图上
[self creatCircleImage];
}
-(void)creatCircleImage
{
// 1.创建一张临时的空白画布
// NO代表透明 YES代表不透明
UIGraphicsBeginImageContextWithOptions(CGSizeMake(120, 120), NO, 0);
// 2.创建圆形所属的正方形
UIBezierPath *path = [UIBezierPath bezierPathWithOvalInRect:CGRectMake(0, 0, 120, 120)];
[path addClip];
// 3.绘制图片
UIImage *image = self.imageView.image;
[image drawInRect:CGRectMake(0, 0, 120, 120)];
// 4.将临时画布的内容保存成新的图片
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
// 5.关闭临时绘画区间
UIGraphicsEndImageContext();
// 显示新图到图片视图上
self.imageView.image = newImage;
}
绘制二维码
- (void)viewDidLoad {
[super viewDidLoad];
CIFilter *filter = [CIFilter filterWithName:@"CIQRCodeGenerator"];
[filter setDefaults];
//为二维码准备背后的二进制数据
NSData *data = [@"www.xxx.cn" dataUsingEncoding:NSUTF8StringEncoding];
//使用kvc的方式将data赋给filter
[filter setValue:data forKey:@"inputMessage"];
//生成图片
CIImage *outputImage = [filter outputImage];
//将CIImage变成UIImage
UIImage *qrImage = [UIImage imageWithCIImage:outputImage];
self.imageView.image = qrImage;
}
转载于:https://my.oschina.net/zyboy/blog/617425