iOS开发——iOS7(及以后版本) SDK自带二维码(含条形码)扫码、二维码生成

 本文转载至 http://www.cnblogs.com/leotangcn/p/4357907.html

  现在很多APP都涉及了二维码扫码功能,这个功能简单实用,很多情况下用户乐于使用,现在本文带来iOS7自带二维码扫码的教程,也包括扫条形码,足以满足简单的扫码要求,而且避免使用第三方的繁琐。

  后期项目中需要生成二维码,我在git上找到一个很方便使用的轻量级开源库,推荐给有需要的朋友:https://github.com/moqod/ios-qr-code-encoder

  下面介绍如何使用iOS7后SDK自带扫码API。

  首先,要引入AVFoundation框架:

1 #import <AVFoundation/AVFoundation.h>

  然后完成扫码需要用的相关类的对象:

1 @property (strong,nonatomic)AVCaptureDevice *device;
2 @property (strong,nonatomic)AVCaptureDeviceInput *input;
3 @property (strong,nonatomic)AVCaptureMetadataOutput *output;
4 @property (strong,nonatomic)AVCaptureSession *session;
5 @property (strong,nonatomic)AVCaptureVideoPreviewLayer *previewLayer;

  初始化:

复制代码
 1     // Device
 2     _device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
 3     // Input
 4     NSError *error = nil;
 5     _input = [AVCaptureDeviceInput deviceInputWithDevice:self.device error:&error];
 6     if (error) {
 7         NSLog(@"初始化输入设备失败");
 8     }
 9     // Output
10     _output = [[AVCaptureMetadataOutput alloc] init];
11     [_output setMetadataObjectsDelegate:self queue:dispatch_get_main_queue()];
12     // Session
13     _session = [[AVCaptureSession alloc] init];
14     [_session setSessionPreset:AVCaptureSessionPresetHigh];
15     // 添加输入输出
16     if ([_session canAddInput:self.input])
17     {
18         [_session addInput:self.input];
19     }
20     if ([_session canAddOutput:self.output])
21     {
22         [_session addOutput:self.output];
23     }
24     // 条码类型 AVMetadataObjectTypeQRCode 即二维码,如果需要扫描条形码,就要在这个数组里添加枚举,command点二维码枚举进去,就会看见其他的需要的条码类型,例如UPC,code39,code128等,酌情使用
25     _output.metadataObjectTypes =@[AVMetadataObjectTypeQRCode];
26     
27     // Preview 
28     _previewLayer =[AVCaptureVideoPreviewLayer layerWithSession:self.session];
29     _previewLayer.videoGravity = AVLayerVideoGravityResizeAspectFill;
30     _previewLayer.frame = self.view.bounds;
31     [self.view.layer insertSublayer:self.previewLayer atIndex:0];
32 // 开始扫码
33 [_session startRunning];
复制代码

  实现代理AVCaptureMetadataOutputObjectsDelegate:

复制代码
 1 #pragma mark - AVCaptureMetadataOutputObjectsDelegate methods
 2 // 扫到码之后,会通过这个代理方法告知扫码结果
 3 - (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputMetadataObjects:(NSArray *)metadataObjects fromConnection:(AVCaptureConnection *)connection {
 4     
 5     NSString *stringValue = nil;
 6     if ([metadataObjects count] >0)
 7     {
 8         AVMetadataMachineReadableCodeObject * metadataObject = [metadataObjects objectAtIndex:0];
 9         stringValue = metadataObject.stringValue;
10     }
11     // 扫码成功,停止扫码会话层活动
12     [_session stopRunning];
13     
14     NSLog(@"%@",stringValue);
15 }
复制代码

  以上就iOS7以后SDK原生扫码,使用比较简单。

posted @ 2016-04-27 15:15  天牛  阅读(602)  评论(0编辑  收藏  举报