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 [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-07-29 18:04:36

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

iOS开发- iOS7显示偏差(UITableView下移)解决办法

之前碰到过一个问题. 就是利用storyboard拖动出来的控件, 在iOS7上跑老是莫名的下移. 比如这样(红色区域为多余的) 解决办法: iOS7在Conttoller中新增了这个属性: automaticallyAdjustsScrollViewInsets,当设置为YES时(默认YES),如果视图里面存在唯一一个UIScrollView或其子类View,那么它会自动设置相应的内边距,这样可以让scroll占据整个视图,又不会让导航栏遮盖. 我们设置automaticallyAdjusts

iOS开发中的高版本宏检测

在框架开发中,为了适配最低的系统版本,我们需要注意不使用高版本API.但除了个人注意之外,是否可以在编译时由系统提示超出兼容版本的API使用情况呢, 观察了CF_AVAILABLE_IOS宏之后,我们给出了如下解决方案,即更改iOS SDK.具体方案如下: 添加位置: Frameworks-> CoreFoundation -> CFAvalailability.h line 115  添加代码: /* added by Mitty */ #define __NEP_2_0 availabil

iOS开发之引用百度地图SDK(二)

关于引用百度SDK添加到项目工程中,需要注意的事项 1.申请Key(密钥)时,在应用类型中选择iOS SDK,并提供项目的Bundle Identifier. 2.在targets项的info中,需要添加key的name为Bundle display name并且value不能为null. 3.在AppDelegate类的程序入口出,需要注册申请的key,用于检测授权成功.(失败将显示不到百度地图) _mapManager = [[BMKMapManager alloc]init]; BOOL

iOS开发- iOS7显示偏差(UITableView下移)解决的方法

之前碰到过一个问题. 就是利用storyboard拖动出来的控件, 在iOS7上跑老是莫名的下移. 比方这样(红色区域为多余的) 解决的方法: iOS7在Conttoller中新增了这个属性: automaticallyAdjustsScrollViewInsets,当设置为YES时(默认YES),假设视图里面存在唯一一个UIScrollView或其子类View.那么它会自己主动设置对应的内边距.这样能够让scroll占领整个视图,又不会让导航栏遮盖. 我们设置automaticallyAdju

iOS开发 iOS7显示偏差(UITableView, UIScrollView下移)解决办法

之前碰到过一个问题. 就是利用storyboard拖动出来的控件, 在iOS7上跑老是莫名的下移. 比如这样(红色区域为多余的) 解决办法: iOS7在Conttoller中新增了这个属性: automaticallyAdjustsScrollViewInsets,当设置为YES时(默认YES),如果视图里面存在唯一一个UIScrollView或其子类View,那么它会自动设置相应的内边距,这样可以让scroll占据整个视图,又不会让导航栏遮盖. 我们设置automaticallyAdjusts

iOS开发debug跟release版本NSLog屏蔽方法

简单介绍以下几个宏: 1) __VA_ARGS__ 是一个可变参数的宏,这个可变参数的宏是新的C99规范中新增的,目前似乎只有gcc支持(VC6.0的编译器不支持).宏前面加上##的作用在于,当可变参数的个数为0时,这里的##起到把前面多余的","去掉,否则会编译出错. 2) __FILE__ 宏在预编译时会替换成当前的源文件名 3) __LINE__宏在预编译时会替换成当前的行号 4) __FUNCTION__宏在预编译时会替换成当前的函数名称 1. 在***-Prefix.pch里

iOS开发-iOS7禁用手势返回

- (void)viewDidAppear:(BOOL)animated { [super viewDidAppear:animated]; // 禁用 iOS7 返回手势 if ([self.navigationController respondsToSelector:@selector(interactivePopGestureRecognizer)]) { self.navigationController.interactivePopGestureRecognizer.enabled

iOS开发系列-Shell脚本编译SDK

静态库Shell脚本 #!/bin/bash #要build的target名 target_Name="HTKit" #编译模式 Release.Debug build_model=Release #获取工程当前所在路径 project_path=$(pwd) #编译文件路径 buildPath=${project_path}/build #导出sdk地址 exportSdkPath=~/Desktop/${target_Name}-SDK/${build_model} if [ !

iOS开发swift版异步加载网络图片(带缓存和缺省图片)

iOS开发之swift版异步加载网络图片 与SDWebImage异步加载网络图片的功能相似,只是代码比较简单,功能没有SD的完善与强大,支持缺省添加图片,支持本地缓存. 异步加载图片的核心代码如下:  func setZYHWebImage(url:NSString?, defaultImage:NSString?, isCache:Bool){         var ZYHImage:UIImage?         if url == nil {             return