天天看點

iOS 原生态API實作二維碼的掃描功能

...............iOS 原生态API實作二維碼的掃描功能

//  ViewController.m

//  QRCode

//

//  Created by chenchen on 15/7/30.

//  Copyright (c) 2015年 BSY. All rights reserved.

//

#import <AVFoundation/AVFoundation.h>

#import "ViewController.h"

@interface ViewController ()<AVCaptureMetadataOutputObjectsDelegate>

 @end

 @implementation ViewController

- (void)viewDidLoad {

    [super viewDidLoad];

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

    AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];

    NSError *error = nil;

    AVCaptureDeviceInput *input = [AVCaptureDeviceInput deviceInputWithDevice:device

                                                                                                                                        error:&error];

    if (input) {

        [session addInput:input];

    }

    else {

        NSLog(@"Error: %@", error);

    }

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

    //設定掃碼支援的編碼格式(如下設定條形碼和二維碼相容)   

    [output setMetadataObjectTypes:@[AVMetadataObjectTypeQRCode, AVMetadataObjectTypeEAN13Code,            AVMetadataObjectTypeEAN8Code,  AVMetadataObjectTypeCode128Code]];

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

    [session addOutput:output];

    [session startRunning];

}

 #pragma mark - AVCaptureMetadataOutputObjectsDelegate

 - (void)captureOutput:(AVCaptureOutput *)captureOutput

       didOutputMetadataObjects:(NSArray *)metadataObjects

       fromConnection:(AVCaptureConnection *)connection

{

    NSString *QRCode = nil;

    for (AVMetadataObject *metadata in metadataObjects) {

        if ([metadata.type isEqualToString:AVMetadataObjectTypeQRCode]) {

            // This will never happen; nobody has ever scanned a QR code... ever              

    QRCode = [(AVMetadataMachineReadableCodeObject *)metadata stringValue];

            break;

        }

    }

    NSLog(@"QR Code: %@", QRCode);

}

- (void)didReceiveMemoryWarning {

    [super didReceiveMemoryWarning];

    // Dispose of any resources that can be recreated.

}

 @end