iOS识别二维码
来源:互联网 发布:phpstudy配置本地域名 编辑:程序博客网 时间:2024/06/09 23:51
环境:Xcode 7.3
目的:扫描识别二维码、条形码
1、引入Foundation框架
#import <AVFoundation/AVFoundation.h>
2、设置全局变量
@interface ViewController () <AVCaptureMetadataOutputObjectsDelegate>@property (strong,nonatomic)AVCaptureDevice * device; // 摄像头@property (strong,nonatomic)AVCaptureDeviceInput * input; // 获取视频数据@property (strong,nonatomic)AVCaptureMetadataOutput * output; // 输出视频数据@property (strong,nonatomic)AVCaptureSession * session; // 拍照@property (strong,nonatomic)AVCaptureVideoPreviewLayer * preview; // 显示图像View@end
3、初始化
// device self.device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo]; // input self.input = [AVCaptureDeviceInput deviceInputWithDevice:self.device error:nil]; // output self.output = [[AVCaptureMetadataOutput alloc] init]; // 扫描窗口位置大小,即有效识别区域(原点位于屏幕右上角,x、y位置互调,width、height位置互调,即frame=(y x,height widght),默认frame=(0 0, 1 1),x、y、width、height均为百分比,0~1之间。详见底部参考1) [self.output setRectOfInterest:CGRectMake((ckHeight - ckScanLabelWidth) / 2 / ckHeight, (ckWidth - ckScanLabelWidth) / 2 / ckWidth, ckScanLabelWidth / ckHeight, ckScanLabelWidth / ckWidth)]; // 说明:使用主线程队列,相应比较同步,使用其他队列,相应不同步,容易让用户产生不好的体验 [self.output setMetadataObjectsDelegate:self queue:dispatch_get_main_queue()]; // session self.session = [[AVCaptureSession alloc] init]; [self.session setSessionPreset:AVCaptureSessionPresetHigh]; if ([self.session canAddInput:self.input]) { [self.session addInput:self.input]; } if ([self.session canAddOutput:self.output]){ [self.session addOutput:self.output]; } // 设置输出的格式 // 提示:一定要先设置会话的输出为output之后,再指定输出的元数据类型! // AVMetadataObjectTypeQRCode:二维码 self.output.metadataObjectTypes = [NSArray arrayWithObjects:AVMetadataObjectTypeEAN13Code, AVMetadataObjectTypeEAN8Code, AVMetadataObjectTypeCode128Code, AVMetadataObjectTypeQRCode, nil]; // preView self.preview = [AVCaptureVideoPreviewLayer layerWithSession:self.session]; self.preview.videoGravity = AVLayerVideoGravityResizeAspectFill; self.preview.frame = self.view.bounds; [self.view.layer insertSublayer:self.preview atIndex:0]; // start [self.session startRunning];
4、实现代理
- (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputMetadataObjects:(NSArray *)metadataObjects fromConnection:(AVCaptureConnection *)connection { NSString * stringValue = [NSString string]; if ([metadataObjects count] >0) { //停止扫描 [self.session stopRunning]; AVMetadataMachineReadableCodeObject * metadataObject = [metadataObjects objectAtIndex:0]; stringValue = metadataObject.stringValue; NSLog(@"%@",stringValue); }}
5、跳转应用
参考:
1、http://www.tuicool.com/articles/6jUjmur
0 0
- iOS,二维码识别,保存二维码
- ios 二维码识别功能
- iOS识别二维码
- iOS二维码扫描/识别
- iOS UIWebView 二维码识别
- iOS 花式二维码生成和二维码识别
- IOS二维码扫描,局部识别
- ios webview中二维码识别
- IOS SDK图片二维码识别
- iOS相册图片二维码识别
- iOS 识别图中二维码
- IOS人脸识别和二维码识别
- iOS之长按识别二维码/生成二维码/扫描二维码
- iOS 下一维码与二维码识别相关资料
- ios原生api识别二维码图片
- ios 原生sdk 识别图片中的二维码
- 二维码识别IOS或Android客户端
- iOS - QRCode(二维码)的生成和识别
- applicationContext.xml详解
- python的md5和sha1加密
- QT创建线程的窗口关闭,但是线程还在运行
- java加密字符串
- 马云,一个毫无道德底线的机会主义者
- iOS识别二维码
- discuz URL 路由解析
- Material Design 最全解析_1 概述
- BeautifulSoup 解析html方法(爬虫)
- 【Arduino官方教程第零辑】基础部分 2-2 模拟引脚
- RxJava 入门
- Eclipse中的自动格式功能
- 双向循环链表demo,自测OK
- caffe Check failed: cv_img.data Could not load问题排查记录