OC - 原生扫码(扫描二维码,条形码)
来源:互联网 发布:十送红军网络歌手 编辑:程序博客网 时间:2024/04/30 03:34
原生扫码需添加<AVFoundation/AVFoundation.h>系统库,遵守AVCaptureMetadataOutputObjectsDelegate协议
下面直接上代码:
@interface ViewController ()<AVCaptureMetadataOutputObjectsDelegate>
@property (nonatomic,strong)AVCaptureSession *session;
@end
- (void)viewDidLoad {
[superviewDidLoad];
CGFloat kWidth = [UIScreenmainScreen].bounds.size.width;
CGFloat kHeight = [UIScreenmainScreen].bounds.size.height;
CGFloat QRcode_width = 150;
NSString *mediaType =AVMediaTypeVideo;
AVAuthorizationStatus authStatus = [AVCaptureDeviceauthorizationStatusForMediaType:mediaType];
if(authStatus ==AVAuthorizationStatusRestricted ||
authStatus == AVAuthorizationStatusDenied)
{
NSLog(@"相机权限受限");
return;
}
else
{
// 获取摄像设备
AVCaptureDevice *device = [AVCaptureDevicedefaultDeviceWithMediaType:AVMediaTypeVideo];
// 创建输入流
AVCaptureDeviceInput *input = [AVCaptureDeviceInputdeviceInputWithDevice:deviceerror:nil];
// 创建输出流
AVCaptureMetadataOutput *outPut = [[AVCaptureMetadataOutputalloc]init];
/**
设置范围 ( 若不需要限制区域扫描,rectOfInterest不需要设置 ,此demo限制扫描区域宽高为150的中心区域 )
注意:坑爹地方!! 此处坐标不是传统意义上的坐标,而为比例关系的坐标,数值在[0,1]区间
坐标原点为右上角,x,y,width,height坐标互换,也就是说设置此处坐标时,应为( y , x , height , width)
*/
outPut.rectOfInterest = CGRectMake(((kHeight - QRcode_width) / 2) / kHeight,
((kWidth - QRcode_width) / 2) / kWidth,
QRcode_width / kHeight,
QRcode_width / kWidth);
// 设置代理 在主线程里刷新
[outPut setMetadataObjectsDelegate:selfqueue:dispatch_get_main_queue()];
// 初始化链接对象
self.session = [[AVCaptureSessionalloc]init];
// 质量采集率(此处设置为高质量采集率)
[self.sessionsetSessionPreset:AVCaptureSessionPresetHigh];
[self.sessionaddInput:input];
[self.sessionaddOutput:outPut];
// 设置扫码支持的编码格式(设置条形码和二维码兼容)
outPut.metadataObjectTypes =@[AVMetadataObjectTypeQRCode,
AVMetadataObjectTypeEAN13Code,
AVMetadataObjectTypeEAN8Code,
AVMetadataObjectTypeCode128Code];
AVCaptureVideoPreviewLayer *layer = [AVCaptureVideoPreviewLayerlayerWithSession:self.session];
layer.videoGravity =AVLayerVideoGravityResizeAspectFill;
layer.frame = self.view.layer.bounds;
[self.view.layerinsertSublayer:layeratIndex:0];
// 开始捕获
[self.sessionstartRunning];
}
}
#pragma mark - AVCaptureMetadataOutputObjectsDelegate
- (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputMetadataObjects:(NSArray *)metadataObjects fromConnection:(AVCaptureConnection *)connection
{
NSString *stringValue;
if (metadataObjects.count >0)
{
AVMetadataMachineReadableCodeObject *metadataObject = [metadataObjectsobjectAtIndex:0];
stringValue = metadataObject.stringValue;
// 输出扫描字符串
NSLog(@"metadataObject.stringValue = %@",metadataObject.stringValue);
/**
根据 stringValue 设置你需要执行的事件
*/
}
// 停止捕获
[self.sessionstopRunning];
}
- (void)viewWillAppear:(BOOL)animated
{
[self.sessionstartRunning];
}
- (void)viewWillDisappear:(BOOL)animated
{
[self.sessionstopRunning];
}
- OC - 原生扫码(扫描二维码,条形码)
- 原生二维码和条形码扫描代码
- iOS系统原生二维码条形码扫描
- iOS系统原生二维码条形码扫描
- iOS 原生的二维码/条形码扫描
- iOS开发(OC)——二维码扫描(原生API,支持条形码)
- iOS原生二维码生成与扫描以及条形码的扫描
- iOS 条码及二维码扫描(从相册中读取条形码/二维码) 以及扫码遇到的问题
- ZXing 真正谷歌原生二维码扫码DEMO,比网上的同类demo快十倍,含条形码识别
- 使用IOS7原生API进行二维码条形码的扫描
- 使用IOS7原生API进行二维码条形码的扫描
- 使用IOS7原生API进行二维码条形码的扫描
- IOS7使用原生API进行二维码和条形码的扫描
- 【iOS】AVFoundation架构下的原生二维码和条形码扫描
- 使用IOS7原生API进行二维码条形码的扫描
- 使用IOS7原生API进行二维码条形码的扫描
- IOS7原生API进行二维码条形码的扫描
- IOS7使用原生API进行二维码和条形码的扫描
- 63. Unique Paths II
- UVA10154->区间DP
- windows下配置安装YAF环境
- 博客索引
- 习题25 更多更多的实践
- OC - 原生扫码(扫描二维码,条形码)
- css3中word-wrap的用法?
- 刷题也就这么点地方
- uci的api接口的使用(总结)
- log4cplus-1.2.0 编译指南(VS08)
- Error:Error: File path too long on Windows, keep below 240 characters : C:\Users\pc\Desktop\allStude
- PyGobject(六)布局容器之Button篇——Gtk.ColorButton
- Codeforces Round #305 (Div. 1) B. Mike and Feet(思路)
- Spring MVC Flash Attribute 的讲解与使用示例