一、生成二维码
在网上遇到很多生成二维码第三方的框架,但是都觉得不好用,而且有很多警告。
自己就写了一个
{
CIFilter *filter_qrcode = [CIFilter filterWithName:@”CIQRCodeGenerator”]; [filter_qrcode setDefaults];
//生成二维码 :这里是二维码的链接形式
NSData *data = [[NSString stringWithFormat:@”yxh://coupon/%@”,string] dataUsingEncoding:NSUTF8StringEncoding];
[filter_qrcode setValue:data forKey:@”inputMessage”];
CIImage *outputImage = [filter_qrcode outputImage];
CIContext *context = [CIContext contextWithOptions:nil];
CGImageRef cgImage = [context createCGImage:outputImage fromRect:[outputImage extent]];
UIImage *image = [UIImage imageWithCGImage:cgImage scale:0.5 orientation:UIImageOrientationUp];
//设置质量
CGFloat width = image.size.width * 5.0; CGFloat height = image.size.height * 5.0;
//画布大小 UIGraphicsBeginImageContext(CGSizeMake(width+30, height+30)); CGContextRef context1 = UIGraphicsGetCurrentContext();
//质量的枚举类型 kCGInterpolationNone CGContextSetInterpolationQuality(context1,kCGInterpolationNone);
//将二维码画到画布中 [image drawInRect:CGRectMake((width+30)/2-width/2, (height+30)/2-height/2, width, height)];
image = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext();
return image;
}//生成二维码
二、扫描二维码
扫描二维码,之前有用ZBarSDK做过,但是不理想,因为有边框去不掉,自定义的控件也没有达到好的效果,看到微信的扫描二维码,觉得还很不错,于是乎找了很多的材料,最终不负使命。 用这个SYQRCodeViewController,根据项目需要进行微调就可以。
下载地址 https://github.com/reesun1130/SYQRCodeDemo
需要注意的是:(1)兼容ios7.0以上;(2)扫描二维码需要访问相册,ios8.0默认相机是打开可以访问的,但是ios7.0需要判断相机权限。
- (BOOL)isAVCaptureActive
{ AVCaptureDevice *aDevice = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
NSError *inputError = nil;
AVCaptureDeviceInput *aInput = [AVCaptureDeviceInput deviceInputWithDevice:aDevice error:&inputError];
if (aInput == nil){
UIAlertView alert = [[UIAlertView alloc] initWithTitle:@”温馨提醒” message:@”\n您还未允许’’访问你的相机,如果需要请设置:设置–>隐私–>相机–>悦享惠–>打开” delegate:nil cancelButtonTitle:@”知道了\n” otherButtonTitles:nil];
[alert show]; return NO;
}else{
return YES; }
}//判断相机权限是否打开