今天遇到一个中间要有一个小图片的二维码的需求,以前用的都是自带的没有图片的二维码,这回加了一个图片,没啥办法,研究吧。。废话不多说,先上效果图:
效果就如图片那样,下面我介绍一下整体思路:
1.创建一个装二维码的图片放到父容器的中心位置,代码如下:
self.imageView = [[UIImageView alloc]initWithFrame:CGRectMake(0, 0, 200, 200)];
[self.view addSubview:self.imageView ];
self.imageView.center = self.view.center;
2.创建二维码图片,并在图片中心放一个Logo图片,下面是创建的二维码就是方法,参数是我们想要访问的链接,并未我们创建的二维码图片添加长按手势
#pragma mark - 生成二维码
- (void)createCoreImage:(NSString *)codeStr{
//1.生成coreImage框架中的滤镜来生产二维码
CIFilter *filter=[CIFilter filterWithName:@"CIQRCodeGenerator"];
[filter setDefaults];
[filter setValue:[codeStr dataUsingEncoding:NSUTF8StringEncoding] forKey:@"inputMessage"];
//4.获取生成的图片
CIImage *ciImg=filter.outputImage;
//放大ciImg,默认生产的图片很小
//5.设置二维码的前景色和背景颜色
CIFilter *colorFilter=[CIFilter filterWithName:@"CIFalseColor"];
//5.1设置默认值
[colorFilter setDefaults];
[colorFilter setValue:ciImg forKey:@"inputImage"];
[colorFilter setValue:[CIColor colorWithRed:0 green:0 blue:0] forKey:@"inputColor0"];
[colorFilter setValue:[CIColor colorWithRed:1 green:1 blue:1] forKey:@"inputColor1"];
//5.3获取生存的图片
ciImg=colorFilter.outputImage;
CGAffineTransform scale=CGAffineTransformMakeScale(10, 10);
ciImg=[ciImg imageByApplyingTransform:scale];
// self.imgView.image=[UIImage imageWithCIImage:ciImg];
//6.在中心增加一张图片
UIImage *img=[UIImage imageWithCIImage:ciImg];
//7.生存图片
//7.1开启图形上下文
UIGraphicsBeginImageContext(img.size);
//7.2将二维码的图片画入
//BSXPCMessage received error for message: Connection interrupted why??
// [img drawInRect:CGRectMake(10, 10, img.size.width-20, img.size.height-20)];
[img drawInRect:CGRectMake(0, 0, img.size.width, img.size.height)];
//7.3在中心划入其他图片
UIImage *centerImg=[UIImage imageNamed:@"hwj"];
CGFloat centerW=70;
CGFloat centerH=70;
CGFloat centerX=(img.size.width-70)*0.5;
CGFloat centerY=(img.size.height -70)*0.5;
[centerImg drawInRect:CGRectMake(centerX, centerY, centerW, centerH)];
//7.4获取绘制好的图片
UIImage *finalImg=UIGraphicsGetImageFromCurrentImageContext();
//7.5关闭图像上下文
UIGraphicsEndImageContext();
//设置图片
self.imageView.image = finalImg;
self.imageView.userInteractionEnabled = YES;
//长按手势识别器
UILongPressGestureRecognizer *pressGesture=[[UILongPressGestureRecognizer alloc]initWithTarget:self action:@selector(handleLongPress:)];
[self.imageView addGestureRecognizer:pressGesture];
}
3.再长按手势的方法中弹出 Alert
-(void)handleLongPress:(UILongPressGestureRecognizer *)uilpgr
{
if (uilpgr.state != UIGestureRecognizerStateBegan){
return;
}
UIAlertController *alert = [UIAlertController alertControllerWithTitle:nil message:nil preferredStyle:UIAlertControllerStyleActionSheet];
UIAlertAction *action1 = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:^(UIAlertAction *action) {
}];
UIAlertAction *action2 = [UIAlertAction actionWithTitle:@"保存到相册" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) {
//保存到相册
UIImageWriteToSavedPhotosAlbum(self.imageView.image, self, @selector(image:didFinishSavingWithError:contextInfo:), NULL);
}];
[alert addAction:action1];
[alert addAction:action2];
[self presentViewController:alert animated:YES completion:nil];
}
4.把图片存入相册
// 存相册
- (void)image:(UIImage *)image didFinishSavingWithError:(NSError *)error contextInfo:(void *)contextInfo
{
if(!error){
// [self showToastMessage:@"保存成功"];
NSLog(@"保存成功");
}else{
NSLog(@"保存失败");
// [self showToastMessage:@"保存失败"];
}
}
真的比我想象的简单多了,如果感兴趣的话就试试吧。。