iOS开发 - 二维码的生成与读取
2015-11-29 17:46
543 查看
http://blog.csdn.net/wangzi11322/article/details/47802963
此前被广泛使用的zbarsdk目前不支持64位处理器
生成二维码的步骤:
导入CoreImage框架
通过滤镜CIFilter生成二维码
二维码的内容(传统的条形码只能放数字):
利用摄像头识别二维码中的内容(模拟器不行)
输入(摄像头)
由会话将摄像头采集到的二维码图像转换成字符串数据
输出(数据)
由预览图层显示扫描场景
实例图
二维码的生成
从iOS7开始集成了二维码的生成和读取功能此前被广泛使用的zbarsdk目前不支持64位处理器
生成二维码的步骤:
导入CoreImage框架
通过滤镜CIFilter生成二维码
二维码的内容(传统的条形码只能放数字):
<code class="hljs mathematica has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">纯文本 名片 <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">URL</span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li></ul>
生成二维码
<code class="hljs rust has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 1. 实例化二维码滤镜</span> CIFilter *filter = [CIFilter filterWithName:@<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"CIQRCodeGenerator"</span>]; <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 2. 恢复滤镜的默认属性</span> [filter setDefaults]; <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 3. 将字符串转换成NSData</span> NSData *data = [<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">str</span> dataUsingEncoding:NSUTF8StringEncoding]; <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 4. 通过KVO设置滤镜inputMessage数据</span> [filter setValue:data forKey:@<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"inputMessage"</span>]; <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 5. 获得滤镜输出的图像</span> CIImage *outputImage = [filter outputImage]; <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 6. 将CIImage转换成UIImage,并放大显示</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span> [UIImage imageWithCIImage:outputImage scale:<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">20.0</span> orientation:UIImageOrientationUp]; </code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li></ul>
读取二维码
读取二维码需要导入AVFoundation框架利用摄像头识别二维码中的内容(模拟器不行)
输入(摄像头)
由会话将摄像头采集到的二维码图像转换成字符串数据
输出(数据)
由预览图层显示扫描场景
设置拍摄会话
<code class="hljs objectivec has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 1. 实例化拍摄设备</span> AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo]; <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 2. 设置输入设备</span> AVCaptureDeviceInput *input = [AVCaptureDeviceInput deviceInputWithDevice:device error:<span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">nil</span>]; <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 3. 设置元数据输出</span> <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 3.1 实例化拍摄元数据输出</span> AVCaptureMetadataOutput *output = [[AVCaptureMetadataOutput alloc] init]; <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 3.3 设置输出数据代理</span> [output setMetadataObjectsDelegate:<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">self</span> queue:dispatch_get_main_queue()]; <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 4. 添加拍摄会话</span> <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 4.1 实例化拍摄会话</span> AVCaptureSession *session = [[AVCaptureSession alloc] init]; <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 4.2 添加会话输入</span> [session addInput:input]; <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 4.3 添加会话输出</span> [session addOutput:output]; <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 4.3 设置输出数据类型,需要将元数据输出添加到会话后,才能指定元数据类型,否则会报错</span> [output setMetadataObjectTypes:@[AVMetadataObjectTypeQRCode]]; </code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li><li style="box-sizing: border-box; padding: 0px 5px;">18</li><li style="box-sizing: border-box; padding: 0px 5px;">19</li></ul>
设置拍摄视频预览图层
<code class="hljs rust has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 5. 视频预览图层</span> <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 5.1 实例化预览图层</span> AVCaptureVideoPreviewLayer *preview = [AVCaptureVideoPreviewLayer layerWithSession:<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">_</span>session]; preview.videoGravity = AVLayerVideoGravityResizeAspectFill; preview.frame = <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">self</span>.view.bounds; <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 5.2 将图层插入当前视图</span> [<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">self</span>.view.layer insertSublayer:preview atIndex:<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">100</span>]; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">self</span>.previewLayer = preview; <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 6. 启动会话</span> [<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">_</span>session startRunning]; </code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li></ul>
生成百度二维码实例
<code class="hljs objectivec has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">#import <span class="hljs-title" style="box-sizing: border-box;"><CoreImage/CoreImage.h></span></span> <span class="hljs-class" style="box-sizing: border-box;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">@interface</span> <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">ViewController</span> ()</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">@property</span> (<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">weak</span>, <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">nonatomic</span>) <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">IBOutlet</span> <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">UIImageView</span> *iv; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">@end</span> <span class="hljs-class" style="box-sizing: border-box;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">@implementation</span> <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">ViewController</span></span> - (<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">void</span>)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 1.实例化二维码滤镜</span> CIFilter *filter = [CIFilter filterWithName:@<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"CIQRCodeGenerator"</span>]; <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 2.恢复滤镜的默认属性 (因为滤镜有可能保存上一次的属性)</span> [filter setDefaults]; <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 3.将字符串转换成NSdata</span> NSData *data = [@<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"http://www.baidu.com"</span> dataUsingEncoding:NSUTF8StringEncoding]; <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 4.通过KVO设置滤镜, 传入data, 将来滤镜就知道要通过传入的数据生成二维码</span> [filter setValue:data forKey:@<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"inputMessage"</span>]; <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 5.生成二维码</span> CIImage *outputImage = [filter outputImage]; <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">UIImage</span> *image = [<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">UIImage</span> imageWithCIImage:outputImage]; <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 6.设置生成好得二维码到imageview上</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">self</span><span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">.iv</span><span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">.image</span> = image; } <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">@end</span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li><li style="box-sizing: border-box; padding: 0px 5px;">18</li><li style="box-sizing: border-box; padding: 0px 5px;">19</li><li style="box-sizing: border-box; padding: 0px 5px;">20</li><li style="box-sizing: border-box; padding: 0px 5px;">21</li><li style="box-sizing: border-box; padding: 0px 5px;">22</li><li style="box-sizing: border-box; padding: 0px 5px;">23</li><li style="box-sizing: border-box; padding: 0px 5px;">24</li><li style="box-sizing: border-box; padding: 0px 5px;">25</li><li style="box-sizing: border-box; padding: 0px 5px;">26</li><li style="box-sizing: border-box; padding: 0px 5px;">27</li><li style="box-sizing: border-box; padding: 0px 5px;">28</li><li style="box-sizing: border-box; padding: 0px 5px;">29</li><li style="box-sizing: border-box; padding: 0px 5px;">30</li><li style="box-sizing: border-box; padding: 0px 5px;">31</li><li style="box-sizing: border-box; padding: 0px 5px;">32</li><li style="box-sizing: border-box; padding: 0px 5px;">33</li><li style="box-sizing: border-box; padding: 0px 5px;">34</li></ul>
实例图
读取百度二维码实例
<code class="hljs objectivec has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">#import <span class="hljs-title" style="box-sizing: border-box;"><AVFoundation/AVFoundation.h></span></span> <span class="hljs-class" style="box-sizing: border-box;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">@interface</span> <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">ViewController</span> ()<<span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">AVCaptureMetadataOutputObjectsDelegate</span>></span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">@property</span> (<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">nonatomic</span>, <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">strong</span>) AVCaptureSession *session; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">@property</span> (<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">nonatomic</span>, <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">strong</span>) AVCaptureVideoPreviewLayer *previewLayer; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">@end</span> <span class="hljs-class" style="box-sizing: border-box;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">@implementation</span> <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">ViewController</span></span> - (<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">void</span>)viewDidLoad { [<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">super</span> viewDidLoad]; <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 1. 实例化拍摄设备</span> AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo]; <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 2. 设置输入设备</span> AVCaptureDeviceInput *input = [AVCaptureDeviceInput deviceInputWithDevice:device error:<span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">nil</span>]; <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 3. 设置元数据输出</span> <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 3.1 实例化拍摄元数据输出</span> AVCaptureMetadataOutput *output = [[AVCaptureMetadataOutput alloc] init]; <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 3.3 设置输出数据代理</span> [output setMetadataObjectsDelegate:<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">self</span> queue:dispatch_get_main_queue()]; <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 4. 添加拍摄会话</span> <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 4.1 实例化拍摄会话</span> AVCaptureSession *session = [[AVCaptureSession alloc] init]; <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 4.2 添加会话输入</span> [session addInput:input]; <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 4.3 添加会话输出</span> [session addOutput:output]; <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 4.3 设置输出数据类型,需要将元数据输出添加到会话后,才能指定元数据类型,否则会报错</span> [output setMetadataObjectTypes:@[AVMetadataObjectTypeQRCode]]; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">self</span><span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">.session</span> = session; <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 5. 视频预览图层</span> <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 5.1 实例化预览图层, 传递_session是为了告诉图层将来显示什么内容</span> AVCaptureVideoPreviewLayer *preview = [AVCaptureVideoPreviewLayer layerWithSession:_session]; preview<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">.videoGravity</span> = AVLayerVideoGravityResizeAspectFill; preview<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">.frame</span> = <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">self</span><span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">.view</span><span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">.bounds</span>; <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 5.2 将图层插入当前视图</span> [<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">self</span><span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">.view</span><span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">.layer</span> insertSublayer:preview atIndex:<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">100</span>]; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">self</span><span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">.previewLayer</span> = preview; <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 6. 启动会话</span> [_session startRunning]; } - (<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">void</span>)captureOutput:(AVCaptureOutput *)captureOutput didOutputMetadataObjects:(<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">NSArray</span> *)metadataObjects fromConnection:(AVCaptureConnection *)connection { <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 会频繁的扫描,调用代理方法</span> <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 1. 如果扫描完成,停止会话</span> [<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">self</span><span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">.session</span> stopRunning]; <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 2. 删除预览图层</span> [<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">self</span><span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">.previewLayer</span> removeFromSuperlayer]; <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">NSLog</span>(@<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"%@"</span>, metadataObjects); <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 3. 设置界面显示扫描结果</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (metadataObjects<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">.count</span> > <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>) { AVMetadataMachineReadableCodeObject *obj = metadataObjects[<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>]; <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 提示:如果需要对url或者名片等信息进行扫描,可以在此进行扩展!</span> <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">NSLog</span>(@<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"%@"</span>, obj<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">.stringValue</span>); } } <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">@end</span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li><li style="box-sizing: border-box; padding: 0px 5px;">18</li><li style="box-sizing: border-box; padding: 0px 5px;">19</li><li style="box-sizing: border-box; padding: 0px 5px;">20</li><li style="box-sizing: border-box; padding: 0px 5px;">21</li><li style="box-sizing: border-box; padding: 0px 5px;">22</li><li style="box-sizing: border-box; padding: 0px 5px;">23</li><li style="box-sizing: border-box; padding: 0px 5px;">24</li><li style="box-sizing: border-box; padding: 0px 5px;">25</li><li style="box-sizing: border-box; padding: 0px 5px;">26</li><li style="box-sizing: border-box; padding: 0px 5px;">27</li><li style="box-sizing: border-box; padding: 0px 5px;">28</li><li style="box-sizing: border-box; padding: 0px 5px;">29</li><li style="box-sizing: border-box; padding: 0px 5px;">30</li><li style="box-sizing: border-box; padding: 0px 5px;">31</li><li style="box-sizing: border-box; padding: 0px 5px;">32</li><li style="box-sizing: border-box; padding: 0px 5px;">33</li><li style="box-sizing: border-box; padding: 0px 5px;">34</li><li style="box-sizing: border-box; padding: 0px 5px;">35</li><li style="box-sizing: border-box; padding: 0px 5px;">36</li><li style="box-sizing: border-box; padding: 0px 5px;">37</li><li style="box-sizing: border-box; padding: 0px 5px;">38</li><li style="box-sizing: border-box; padding: 0px 5px;">39</li><li style="box-sizing: border-box; padding: 0px 5px;">40</li><li style="box-sizing: border-box; padding: 0px 5px;">41</li><li style="box-sizing: border-box; padding: 0px 5px;">42</li><li style="box-sizing: border-box; padding: 0px 5px;">43</li><li style="box-sizing: border-box; padding: 0px 5px;">44</li><li style="box-sizing: border-box; padding: 0px 5px;">45</li><li style="box-sizing: border-box; padding: 0px 5px;">46</li><li style="box-sizing: border-box; padding: 0px 5px;">47</li><li style="box-sizing: border-box; padding: 0px 5px;">48</li><li style="box-sizing: border-box; padding: 0px 5px;">49</li><li style="box-sizing: border-box; padding: 0px 5px;">50</li><li style="box-sizing: border-box; padding: 0px 5px;">51</li><li style="box-sizing: border-box; padding: 0px 5px;">52</li><li style="box-sizing: border-box; padding: 0px 5px;">53</li><li style="box-sizing: border-box; padding: 0px 5px;">54</li><li style="box-sizing: border-box; padding: 0px 5px;">55</li><li style="box-sizing: border-box; padding: 0px 5px;">56</li><li style="box-sizing: border-box; padding: 0px 5px;">57</li><li style="box-sizing: border-box; padding: 0px 5px;">58</li><li style="box-sizing: border-box; padding: 0px 5px;">59</li><li style="box-sizing: border-box; padding: 0px 5px;">60</li><li style="box-sizing: border-box; padding: 0px 5px;">61</li><li style="box-sizing: border-box; padding: 0px 5px;">62</li><li style="box-sizing: border-box; padding: 0px 5px;">63</li><li style="box-sizing: border-box; padding: 0px 5px;">64</li><li style="box-sizing: border-box; padding: 0px 5px;">65</li><li style="box-sizing: border-box; padding: 0px 5px;">66</li><li style="box-sizing: border-box; padding: 0px 5px;">67</li><li style="box-sizing: border-box; padding: 0px 5px;">68</li><li style="box-sizing: border-box; padding: 0px 5px;">69</li><li style="box-sizing: border-box; padding: 0px 5px;">70</li><li style="box-sizing: border-box; padding: 0px 5px;">71</li></ul>
相关文章推荐
- iOS--- 动态添加了按钮,绑定同一个点击事件,如何判断点击的是哪个?
- iOS-入门HelloWorld
- iOS-入门HelloWorld
- iOS-入门HelloWorld
- iOS worst practice
- 【iOS】自定义导航栏(二)
- 【ios】AddChildViewController 实现 Pop View
- 按钮点击一个,其它都取消选中状态的iOS开发,
- iOS 自动布局 Masonry
- iOS MKMapView 地图视图
- iOS开发之详解剪贴板
- IOS XML解析之GDataXML
- iOS中的文件I/O
- iOS---collectionView
- iOS中的数据持久化方式
- 【iOS学习笔记】iOS启动顺序
- 在iOS中使用ZXing库
- iOS textView的使用总结
- iOS开发之页面跳转
- iOS编程之道设计模式