二维码是用特定的几何图形来记录信息session
在以前,经常使用的二维码开发框架有:ZXing和ZBarSDK框架
苹果从iOS7开始集成了二维码的生成和读取功能,而且以前的框架不支持64位,所以目前只使用苹果的框架便可ide
二维码的开发spa
生成二维码code
扫描二维码对象
二维码的生成就是将固定的信息生成对应的二维码图形图片
生成二维码的步骤:开发
导入CoreImage框架rem
经过滤镜CIFilter生成二维码get
- 建立滤镜对象 - 设置滤镜的默认设置 - 给滤镜设置数据(KVC) - 获取生成的二维码图形
代码实现
#import <CoreImage/CoreImage.h> // 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];
二维码扫描就是将二维码的图像读取,而且解析成咱们能够识别的信息
扫描二维码的步骤
读取二维码须要导入AVFoundation框架
利用摄像头读取信息,而且输入
- 获取捕捉会话(**AVCaptureSession**) - 设置输入(摄像头) - 设置输出(数据) - 添加预览图层 - 开始扫描二维码
代码实现
#import <AVFoundation/AVFoundation.h> - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { // 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]; [output setMetadataObjectTypes:@[AVMetadataObjectTypeQRCode]]; // 4.添加扫描阅览的layer AVCaptureVideoPreviewLayer *player = [[AVCaptureVideoPreviewLayer alloc] initWithSession:session]; player.frame = self.view.bounds; self.layer = player; [self.view.layer addSublayer:player]; // 5.开始扫描 [session startRunning]; } #pragma mark - 实现元数据的回调方法 - (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]; } }