系統掃二維碼

#import "WQRcodeVC.h"

#import <AVFoundation/AVFoundation.h>


@interface WQRcodeVC ()<AVCaptureMetadataOutputObjectsDelegate,UIAlertViewDelegate>

//設備

@property (nonatomic,strong)AVCaptureDevice *device;

//設備輸入

@property (nonatomic,strong)AVCaptureDeviceInput *input;


@property (nonatomic,strong)AVCaptureMetadataOutput *output;

//掃描會話

@property (nonatomic,strong)AVCaptureSession *session;


//背景圖片

@property (nonatomic,strong)UIImageView *bgImageView;

//掃描線

@property (nonatomic,strong)UIImageView *lineImageView;


//掃描圖層

@property (nonatomic,strongAVCaptureVideoPreviewLayer *layer;


@end


@implementation WQRcodeVC


-(UIImageView *)bgImageView{

    

    if (!_bgImageView) {

        _bgImageView = [[UIImageView alloc] initWithFrame:CGRectMake(([UIScreen mainScreen].bounds.size.width - 280 ) /2.0, 100, 280, 280)];

        _bgImageView.image = [UIImage imageNamed:@"pick_bg"];

    }

    

    return _bgImageView;

    

}


-(UIImageView *)lineImageView{

    

    if (!_lineImageView) {

        _lineImageView = [[UIImageView alloc] initWithFrame:CGRectMake(([UIScreen mainScreen].bounds.size.width - 280 ) /2.0, 110, 280, 2)];

        _lineImageView.image = [UIImage imageNamed:@"line"];

    }

    return _lineImageView;

}



- (void)viewDidLoad {

    [super viewDidLoad];

    // IOS7之前,都是使用第三方庫zbar來實現掃面二維碼的功能,IOS7之後系統提供了二維碼掃描的方法(真機有效)

    self.view.backgroundColor = [UIColor lightGrayColor];

    

    [self setTitle:@"掃碼"];

    

    [self.view addSubview:self.bgImageView];

    [self.view addSubview:self.lineImageView];

    

    //開始掃描二維碼(條形碼)

    [self readQrcode];

}

-(void)readQrcode{

    

    //實例化設備對象

    self.device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];

    

    NSError *error;

    //實例化設備輸入

    self.input = [[AVCaptureDeviceInput alloc] initWithDevice:self.device error:&error];

    

    if (error) {

        NSLog(@"error = %@",error);

    }

    

    

    //實例化設備輸出

    self.output = [AVCaptureMetadataOutput new];

    //設置代理

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

    

    //實例化掃描會話

    self.session = [AVCaptureSession new];

    

    //添加會話輸入

    [self.session addInput:self.input];

    //添加會話輸出

    [self.session addOutput:self.output];

    

    //設置輸出支持的二維碼或者條形碼類型(一定要添加到會話之後再設置類型,否則會崩潰)

    [self.output setMetadataObjectTypes:@[AVMetadataObjectTypeQRCode,AVMetadataObjectTypeCode39Mod43Code,AVMetadataObjectTypeCode93Code,AVMetadataObjectTypeCode128Code]];

    

    //添加掃描圖層

    AVCaptureVideoPreviewLayer *PreviewLayer = [[AVCaptureVideoPreviewLayer alloc] initWithSession:self.session];

    

    //設置圖層佈局(鋪滿)

    PreviewLayer.videoGravity = AVLayerVideoGravityResizeAspectFill;

    

    //設置圖層大小和位置

    PreviewLayer.frame = CGRectMake(([UIScreen mainScreen].bounds.size.width - 280 ) /2.0, 110, 280, 280);

    

    //把掃描的圖層出入到self.View的最底層layer當中

    [self.view.layer insertSublayer:PreviewLayer atIndex:0];

    

    self.layer = PreviewLayer;


    

    //開始掃描

    [self.session startRunning];

   

    

    //循環移動掃描線

    [self lineMoveAround];

    

}


詳細完整資源資源代碼:http://download.csdn.net/detail/qq_33646395/9766846
發佈了32 篇原創文章 · 獲贊 23 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章