iOS--iOS7摄像头识别二维码功能
2015-07-31 14:30
162 查看
iOS–iOS7摄像头识别二维码功能
属性介绍:
AVFoundation 框架基于以下几个类实现图像捕捉 ,通过这些类可以访问来自相机设备的原始数据并控制它的组件。
AVCaptureDevice 是关于相机硬件的接口。它被用于控制硬件特性,诸如镜头的位置、曝光、闪光灯等。
AVCaptureDeviceInput 提供来自设备的数据。
AVCaptureOutput 是一个抽象类,描述 capture session 的结果。以下是三种关于静态图片捕捉的具体子类:
AVCaptureStillImageOutput 用于捕捉静态图片
AVCaptureMetadataOutput 启用检测人脸和二维码
AVCaptureVideoOutput 为实时预览图提供原始帧
AVCaptureSession 管理输入与输出之间的数据流,以及在出现问题时生成运行时错误。
AVCaptureVideoPreviewLayer 是 CALayer 的子类,可被用于自动显示相机产生的实时图像。它还有几个工具性质的方法,可将 layer 上的坐标转化到设备上。它看起来像输出,但其实不是。另外,它拥有 session (outputs 被 session 所拥有)。
设置属性:
@property (nonatomic, strong) AVCaptureSession *session; @property (nonatomic, strong) AVCaptureDevice *device; @property (nonatomic, strong) AVCaptureDeviceInput *input; @property (nonatomic, strong) AVCaptureMetadataOutput *outPut; @property (nonatomic, strong) AVCaptureVideoPreviewLayer *previewLayer;
添加摄像头方法
/** * 设置摄像头代码 */ - (void)setupCamera{ //设备 _device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo]; //输入绑定设备 NSError *error; _input = [AVCaptureDeviceInput deviceInputWithDevice:_device error:&error]; if (error) { return; } //输出 _outPut = [[AVCaptureMetadataOutput alloc]init]; [_outPut setMetadataObjectsDelegate:self queue:dispatch_get_main_queue()]; //session _session = [[AVCaptureSession alloc]init]; [_session setSessionPreset:AVCaptureSessionPresetHigh]; //设置画面采集的质量 if ([_session canAddInput:_input]) { [_session addInput:_input]; } if ([_session canAddOutput:_outPut]) { [_session addOutput:_outPut]; } //一定要先设置session的输出为output之后,再指定输出的元数据类型为二维码类型! [_outPut setMetadataObjectTypes:@[AVMetadataObjectTypeQRCode]]; //预览图层 _previewLayer = [[AVCaptureVideoPreviewLayer alloc]initWithSession:_session]; // _previewLayer.videoGravity = AVLayerVideoGravityResizeAspect; //preview图层的属性,使视图形状为屏幕大小形状 _previewLayer.frame = self.view.frame;//preview图层的大小 [self.view.layer insertSublayer:_previewLayer atIndex:0]; //将图层添加到视图的图层 //开始运行 [_session startRunning]; }
注意output中设置了一个delegate,我们需要怎么这个协议,然后在下面的代码中设置
[_outPut setMetadataObjectsDelegate:self queue:dispatch_get_main_queue()]
协议的实现部分如下:
#pragma mark - AVCaptureMetadataOutputObjectsDelegate // 在完成二维码解码时,调用 // 如果QRCode的内容越大,转换需要的时间就越长 - (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputMetadataObjects:(NSArray *)metadataObjects fromConnection:(AVCaptureConnection *)connection{ NSString *stringValue; if ([metadataObjects count] >0) { AVMetadataMachineReadableCodeObject * metadataObject = [metadataObjects objectAtIndex:0]; stringValue = metadataObject.stringValue; } NSLog(@"%@",stringValue); //获取扫描数据,结束编辑 [_session stopRunning]; [self dismissViewControllerAnimated:YES completion:nil]; }
二维码生成网站,测试时可使用
http://cli.im/text?text053e86238125abe22dd1474278f5855d相关文章推荐
- iOS 耳机的简单知识
- iOS 键盘弹出视图上移
- 小细节大作为:提高iOS访问权限通过率有这几个办法
- IOS开发-PCH文件的使用
- IOS7 到IOS8 一个通用的横竖屏幕切换总结
- iOS 文件操作
- iOS 简单的猜颜色游戏 界面设计的比较简单 - -
- iOS8新特性扩展(Extension)应用之四——自定义键盘控件
- IOS:ios最简单的控件练习
- ios NSNotificationCenter 的简单使用
- iOS8 iPAD上弹出所谓的ActionSheet
- iOS 如何获取屏幕大小
- iOS应用内付费(IAP)开发步骤列表
- 【转】如何入门iOS开发
- iOS画线
- iOS提交后申请加急审核
- iOS CGRectInset,CGRectOffset
- ios命名规范
- iOS- 如何集成支付宝
- iOS storyboard 添加Entry point