#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,strong) AVCaptureVideoPreviewLayer *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];
}