zoukankan      html  css  js  c++  java
  • iOS--二维码

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

  • 相关阅读:
    jQuery Eazyui的学习和使用(一)
    PHP 红包功能代码
    PHPExcel 使用学习
    AngularJS 学习笔记
    sublime 快速生成html基础代码
    mysql 重置主键
    php 常用文件操作
    Android隐藏状态栏实现沉浸式体验
    MVC
    安卓Design包之NavigationView结合DrawerLayout,toolbar的使用,FloatingActionButton
  • 原文地址:https://www.cnblogs.com/LifeTechnologySupporter/p/5046974.html
Copyright © 2011-2022 走看看