使用系统自带生成/扫描二维码
iOS7开始苹果集成了二维码的生成的扫描 ### 生成二维码的步骤
导入CoreImage框架 #import <CoreImage/CoreImage.h>
通过滤镜CIFilte生成二维码 ### 二维码的内容(传统的条形码只能放数字)
纯文本
名片
URL
生成二维码
// 1.创建过滤器 CIFilter *filter = [CIFilter filterWithName:@"CIQRCodeGenerator"]; // 2.恢复默认 [filter setDefaults]; // 3.给过滤器添加数据(正则表达式/账号和密码) NSString *dataString = @"http://www.520it.com"; NSData *data = [dataString dataUsingEncoding:NSUTF8StringEncoding]; [filter setValue:data forKeyPath:@"inputMessage"]; // 4.获取输出的二维码 CIImage *outputImage = [filter outputImage]; //因为生成的二维码模糊,所以通过createNonInterpolatedUIImageFormCIImage:outputImage来获得高清的二维码图片 // 5.显示二维码 self.imageView.image = [self createNonInterpolatedUIImageFormCIImage:outputImage withSize:300]; /** * 根据CIImage生成指定大小的UIImage * * @param image CIImage * @param size 图片宽度 */ - (UIImage *)createNonInterpolatedUIImageFormCIImage:(CIImage *)image withSize:(CGFloat) size { CGRect extent = CGRectIntegral(image.extent); CGFloat scale = MIN(size/CGRectGetWidth(extent), size/CGRectGetHeight(extent)); // 1.创建bitmap; size_t width = CGRectGetWidth(extent) * scale; size_t height = CGRectGetHeight(extent) * scale; CGColorSpaceRef cs = CGColorSpaceCreateDeviceGray(); CGContextRef bitmapRef = CGBitmapContextCreate(nil, width, height, 8, 0, cs, (CGBitmapInfo)kCGImageAlphaNone); CIContext *context = [CIContext contextWithOptions:nil]; CGImageRef bitmapImage = [context createCGImage:image fromRect:extent]; CGContextSetInterpolationQuality(bitmapRef, kCGInterpolationNone); CGContextScaleCTM(bitmapRef, scale, scale); CGContextDrawImage(bitmapRef, extent, bitmapImage); // 2.保存bitmap到图片 CGImageRef scaledImage = CGBitmapContextCreateImage(bitmapRef); CGContextRelease(bitmapRef); CGImageRelease(bitmapImage); return [UIImage imageWithCGImage:scaledImage]; }
扫描二维码
// 1.创建捕捉会话 AVCaptureSession *session = [[AVCaptureSession alloc] init]; self.session = session; // 2.添加输入设备(数据从摄像头输入) AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo]; AVCaptureDeviceInput *input = [AVCaptureDeviceInput deviceInputWithDevice:device error:nil]; [session addInput:input]; // 3.添加输出数据(示例对象-->类对象-->元类对象-->根元类对象) AVCaptureMetadataOutput *output = [[AVCaptureMetadataOutput alloc] init]; [output setMetadataObjectsDelegate:self queue:dispatch_get_main_queue()]; [session addOutput:output]; // 3.1.设置输入元数据的类型(类型是二维码数据) [output setMetadataObjectTypes:@[AVMetadataObjectTypeQRCode]]; // 4.添加扫描图层 AVCaptureVideoPreviewLayer *layer = [AVCaptureVideoPreviewLayer layerWithSession:session]; layer.frame = self.view.bounds; [self.view.layer addSublayer:layer]; self.layer = layer; // 5.开始扫描 [session startRunning];
扫描会调用的方法
// 当扫描到数据时就会执行该方法 - (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputMetadataObjects:(NSArray *)metadataObjects fromConnection:(AVCaptureConnection *)connection { if (metadataObjects.count > 0) { //获得扫描数据,最后一个时最新扫描的数据 AVMetadataMachineReadableCodeObject *object = [metadataObjects lastObject]; NSLog(@"%@", object.stringValue); // 停止扫描 [self.session stopRunning]; // 将预览图层移除 [self.layer removeFromSuperlayer]; } else { NSLog(@"没有扫描到数据"); } }
以上就是对IOS 二维码的资料整理,后续继续补充相关资料,谢谢大家对本站的支持!
本文向大家介绍IOS Bundle详细介绍及使用方法,包括了IOS Bundle详细介绍及使用方法的使用技巧和注意事项,需要的朋友参考一下 什么是Bundle? A bundle is a directory with a standardized hierarchical structure that holds executable code and the resources used by
本文向大家介绍Android ADB详细介绍及用法,包括了Android ADB详细介绍及用法的使用技巧和注意事项,需要的朋友参考一下 Android ADB 用法 adb 全称是 Android Debug Bridge, 就是起到调试桥的作用。 用来操作android设备的 阅读目录 adb 有什么用 adb 下载 adb devices adb install (安装软件) adb
本文向大家介绍Docker安装及基本使用方法详细介绍,包括了Docker安装及基本使用方法详细介绍的使用技巧和注意事项,需要的朋友参考一下 Docker是一个用了一种新颖方式实现的超轻量虚拟机,在实现的原理和应用上还是和VM有巨大差别,专业的叫法是应用容器(Application Container)。(我个人还是喜欢称虚拟机) Docker应用容器相对于 VM 有以下几个优点: 启动速度快,容器
本文向大家介绍Bootstrap table使用方法详细介绍,包括了Bootstrap table使用方法详细介绍的使用技巧和注意事项,需要的朋友参考一下 bootstrap-table是一个非常好用的表格插件,提供了很多工具及分页、搜索等功能。 首先我们需要下面几个文件, 中文包好像可以防止某些bug 如果你单独引入这些文件而导致样式出错,请下载完整的bootstrap-table 下面是boo
本文向大家介绍Python pass详细介绍及实例代码,包括了Python pass详细介绍及实例代码的使用技巧和注意事项,需要的朋友参考一下 Python pass的用法: 空语句 do nothing 保证格式完整 保证语义完整 以if语句为例,在c或c++/Java中: 对应于Python就要这样写: 1 pass语句在函数中的作用 当你在编写一个程序时,执行语句部分思路还没有完成,这时你可
本文向大家介绍Android Loader详细介绍及实例代码,包括了Android Loader详细介绍及实例代码的使用技巧和注意事项,需要的朋友参考一下 一,Android装载器基本方法 装载器从android3.0开始引进。它使得在activity或fragment中异步加载数据变得简单。装载器具有如下特性: 它们对每个Activity和Fragment都有效。 他们提供了异步加载数据的能力。