#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];
}