二维码的介绍
二维码是用特定的几何图形来记录信息
在之前,常用的二维码开发框架有:ZXing和ZBarSDK
苹果从iOS7开始集成了二维码的生成和读取功能,并且之前的框架不支持64位,因此目前只使用苹果的框架即可
-
二维码的开发
生成二维码
扫描二维码
二维码的生成
二维码的生成就是将固定的信息生成对应的二维码图形
-
生成二维码的步骤:
导入CoreImage框架
-
通过滤镜CIFilter生成二维码
- 创建滤镜对象 - 设置滤镜的默认设置 - 给滤镜设置数据(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];
}
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。