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; }
}//判断相机权限是否打开
在网上遇到很多生成二维码第三方的框架,但是都觉得不好用,而且有很多警告。
自己就写了一个
(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; }
}//判断相机权限是否打开
相关文章推荐
- ios 判断控制器是否是第一次进入画页的做法
- ios 开发之获取手机的外网IP和内网IP
- ios6方向旋转问题
- 程序日志--ios“打开网页url连接”程序
- iOS 系统消息通知
- ios 支付宝开发
- iOS 一些常用的宏定义
- Jenkins学习——将IOS代码打包为IPA文件
- 如果Cell设置了 titlelabel Titlelabel会覆盖加在cell上面的其他控件
- iOS设计模式 - MVC
- iOS设计模式 - 开篇
- ios设置按钮点击时的文字和图片(而非非背景)
- iOS开发系列--视图切换
- ios block传值
- iOS开发-NSString-2
- iOS7导航控制器自定义返回按钮
- iOS开发-NSString-1
- iOS contentHorizontalAlignment 和 setImageEdgeInsets 范二后的总结
- iOS开发中的一些小技巧
- 使用iOS 8 SDK添加Touch ID指纹识别功能