本文转载至 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 [email protected][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原生扫码,使用比较简单。
时间: 2024-10-12 22:20:46