您的位置:首页 > 移动开发 > IOS开发

ios 开发之 扫描二维码和生成二维码

2015-07-10 17:26 561 查看
一、生成二维码

在网上遇到很多生成二维码第三方的框架,但是都觉得不好用,而且有很多警告。

自己就写了一个

(UIImage*)twoDensionImageWtihString:(NSString*)string

{

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; }

}//判断相机权限是否打开
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: