二維碼開發,蘋果自帶,支持64位

二維碼的介紹

  • 二維碼是用特定的幾何圖形來記錄信息session

  • 在以前,經常使用的二維碼開發框架有:ZXing和ZBarSDK框架

  • 蘋果從iOS7開始集成了二維碼的生成和讀取功能,而且以前的框架不支持64位,所以目前只使用蘋果的框架便可ide

  • 二維碼的開發spa

    • 生成二維碼code

    • 掃描二維碼對象

二維碼的生成

  • 二維碼的生成就是將固定的信息生成對應的二維碼圖形圖片

  • 生成二維碼的步驟:開發

    • 導入CoreImage框架rem

    • 經過濾鏡CIFilter生成二維碼get

      - 建立濾鏡對象
      
        - 設置濾鏡的默認設置
      
        - 給濾鏡設置數據(KVC)
      
        - 獲取生成的二維碼圖形
  • 代碼實現

#import <CoreImage/CoreImage.h>



    // 1.建立濾鏡對象

    CIFilter *filter = [CIFilter filterWithName:@"CIQRCodeGenerator"];



    // 2.設置相關的信息

    [filter setDefaults];



    // 3.設置二維碼的數據

    NSString *dataString = @"http://www.520it.com";

    NSData *data = [dataString dataUsingEncoding:NSUTF8StringEncoding];

    [filter setValue:data forKeyPath:@"inputMessage"];



    // 4.獲取輸出的圖片

    CIImage *outputImage = [filter outputImage];

二維碼的掃描

  • 二維碼掃描就是將二維碼的圖像讀取,而且解析成咱們能夠識別的信息

  • 掃描二維碼的步驟

    • 讀取二維碼須要導入AVFoundation框架

    • 利用攝像頭讀取信息,而且輸入

      - 獲取捕捉會話(**AVCaptureSession**)
      
        - 設置輸入(攝像頭)
      
        - 設置輸出(數據)
      
        - 添加預覽圖層
      
        - 開始掃描二維碼
  • 代碼實現

#import <AVFoundation/AVFoundation.h>



- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event

{

    // 1.獲取捕捉會話

    AVCaptureSession *session = [[AVCaptureSession alloc] init];

    self.session = session;



    // 2.設置捕捉會話的輸入設備

    AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];

    AVCaptureDeviceInput *input = [AVCaptureDeviceInput deviceInputWithDevice:device error:nil];

    [session addInput:input];



    // 3.設置捕捉會話的輸出設備

    AVCaptureMetadataOutput *output = [[AVCaptureMetadataOutput alloc] init];

    [output setMetadataObjectsDelegate:self queue:dispatch_get_main_queue()];

    [session addOutput:output];

    [output setMetadataObjectTypes:@[AVMetadataObjectTypeQRCode]];



    // 4.添加掃描閱覽的layer

    AVCaptureVideoPreviewLayer *player = [[AVCaptureVideoPreviewLayer alloc] initWithSession:session];

    player.frame = self.view.bounds;

    self.layer = player;

    [self.view.layer addSublayer:player];



    // 5.開始掃描

    [session startRunning];

}



#pragma mark - 實現元數據的回調方法

- (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputMetadataObjects:(NSArray *)metadataObjects fromConnection:(AVCaptureConnection *)connection

{ 

    if (metadataObjects.count > 0) {

        AVMetadataMachineReadableCodeObject *object = [metadataObjects lastObject];

        NSLog(@"%@", object.stringValue);



        [self.session stopRunning];

        [self.layer removeFromSuperlayer];

    }

}
相關文章
相關標籤/搜索