zoukankan      html  css  js  c++  java
  • 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 =@[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原生扫码,使用比较简单。

  • 相关阅读:
    JAVA内部类的使用
    JAVA try&&catch
    是时候清除你的僵尸代码了
    修复EXE文件无法打开
    MFC实现播放SWF
    JAVA实现swap
    Java RandomAccessFile用法
    程序员如何做出“不难看”的设计
    JAVA期末考试试题
    java static类
  • 原文地址:https://www.cnblogs.com/Camier-myNiuer/p/5438998.html
Copyright © 2011-2022 走看看