现在很多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 =@[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原生扫码,使用比较简单。

iOS--二维码的更多相关文章

  1. Ios二维码扫描(系统自带的二维码扫描)

    Ios二维码扫描 这里给大家介绍的时如何使用系统自带的二维码扫描方法和一些简单的动画! 操作步骤: 1).首先你需要搭建UI界面如图:下图我用了俩个imageview和一个label 2).你需要在你 ...

  2. iOS二维码扫描IOS7系统实现

    扫描相关类 二维码扫描需要获取摄像头并读取照片信息,因此我们需要导入系统的AVFoundation框架,创建视频会话.我们需要用到一下几个类: AVCaptureSession 会话对象.此类作为硬件 ...

  3. iOS - 二维码扫描和应用跳转

    序言 前面我们已经调到过怎么制作二维码,在我们能够生成二维码之后,如何对二维码进行扫描呢? 在iOS7之前,大部分应用中使用的二维码扫描是第三方的扫描框架,例如ZXing或者ZBar.使用时集成麻烦, ...

  4. iOS二维码生成与识别

    在 IOS7 以前,在IOS中实现二维码和条形码扫描,有两大开源组件 ZBar 与 ZXing. 总结下各自的缺点: ZBar在扫描的灵敏度上,和内存的使用上相对于ZXing上都是较优的,但是对于 & ...

  5. iOS 二维码 学习

    这段时间忙着交接工作,找工作,找房子,入职,杂七杂八的,差不多一个月没有静下来学习了.这周末晚上等外卖的时间学习一下二维码的制作与扫描. 项目采用OC语言,只要使用iOS自带的CoreImage框架, ...

  6. iOS二维码、条形码生成(可指定大小、颜色)

    一.前言: iOS7.0之后可以利用系统原生 API 生成二维码, iOS8.0之后可以生成条形码, 系统默认生成的颜色是黑色. 在这里, 利用以下方法可以生成指定大小.指定颜色的二维码和条形码, 还 ...

  7. iOS:二维码的生成

    所谓的二维码就是一个图片,只不过在iOS需要借用<CoreImage/CoreImage.h>来实现,  并且二维码图片是通过CIImage来转成UIImage的.具体步骤如下: // 1 ...

  8. iOS 二维码的生成 QREncoder

    生成二维码: 在生成二维码的库中QREncoder最为常见,但是由于中文字符的特殊性,生成中文的时候有时会出现一定的错误,所以建议使用libqrencode,是一个纯C编写的类库. 以libqrenc ...

  9. iOS二维码生成、识别、扫描等

    二维码扫描 前言: 最近的项目中使用到了二维码,二维码这个模块功能也完成:觉得还是有必要总结一下用来做记录.好长时间没有写二维码了都忘记在差不多了,重新拾起来还是挻快的. 二维码使用场景: 生活中有很 ...

  10. iOS二维码生成-libqrencode编译报错

    libqrencode使用 1.将libqrencode文件夹整个拖入项目文件夹中 2.在要生成二维码的页面的 .m文件头部添加 #import "QRCodeGenerator.h&quo ...

随机推荐

  1. Tomcat中使用JNDI加载JDBC数据源

    以前写JDBC的时候总是手工写一个类,用硬代码写上className.url.用户名和密码什么的,然后通过DriverManager获取到Connection.那样写是很方便,但是如果想更改的话,需要 ...

  2. css中怎么设置透明度的问题

    小伙伴们是不是在找怎么样去设置页面的透明度的方法呢...别找了,我这儿就有,而且肯定够用了. 我自己会用到的就有两种,可以和大家分享一下. 1.用opcity的方法去设置透明度.代码如下: .div ...

  3. ARP包分析(wireshark)

    ARP数据报格式(42字节) 这是用wireshark抓到的一个ARP包,42个字节. 这个ARP包的 以太网首部(14字节): 字段               长度(Byte)           ...

  4. Notes for Studying Django

    Once you added a new application to INSTALLED_APPS, the database tables need to be updated, thus you ...

  5. Object-C内存管理的理解总结

    今天看到了OC的内存管理这块,觉得很亲切. 自己的习惯是尽量自己掌控程序的空间和时间,有点强迫症的感觉.用C和C++做项目的时候,时时刻刻都在操心这new和delete的配对使用和计数,学习stl和b ...

  6. 使用getopt()处理命令行参数

    假设有一程序 testopt,其命令行选项参数有: -i            选项 -l            选项 -r           选项 -n <值> 带关联值的选项 则处理 ...

  7. Async/Await FAQ

    From time to time, I receive questions from developers which highlight either a need for more inform ...

  8. 如何让MVC6在IIS上面跑

    asp.net5的MVC6发布出来的结果和MVC5之前版本的相差太远了,直接在本地的IIS服务器上面是不可能运行的. 看了汤姆大叔的MVC6项目发布与部署,讲了很多丰富的知识点.但是对于立即要解决问题 ...

  9. linux-8 基本命令---date

    2,date命令用于显示.设置系统的时间或日期,格式如下: date[选项][+指定格式]. date的详细格式如下: date命令格式 参数 作用 %t 跳个[tab]键 %H 小时(00-23) ...

  10. unity 实现简单的分离

    在网上随便搜一搜资料就可以找到很多关于Mvc ,MVVM,StrangeIoc等有关显示与数据分离的博客,很多大神也是讲的蛮有道理的,但是这些框架理解起来有一定的难度, 这时候肯定有人说有现成的框架为 ...