// // // #import "QQScanNativeViewController.h" #import "CreateBarCodeViewController.h" #import "ScanResultViewController.h" #import "LBXScanVideoZoomView.h" #import "LBXPermission.h" #import "LBXPermissionSetting.h" @interface QQScanNativeViewController () @property (nonatomic, strong) LBXScanVideoZoomView *zoomView; @property (nonatomic, assign) CGFloat maxVideoScale; @end @implementation QQScanNativeViewController - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. if ([self respondsToSelector:@selector(setEdgesForExtendedLayout:)]) { self.edgesForExtendedLayout = UIRectEdgeNone; } self.view.backgroundColor = [UIColor blackColor]; //设置扫码后需要扫码图像 self.isNeedScanImage = YES; } - (void)viewDidLayoutSubviews { [super viewDidLayoutSubviews]; if (_topTitle) { _topTitle.bounds = CGRectMake(0, 0, 145, 60); _topTitle.center = CGPointMake(CGRectGetWidth(self.view.frame)/2, 50); } if (_bottomItemsView) { CGRect frame = CGRectMake(0, CGRectGetMaxY(self.view.bounds)-100, CGRectGetWidth(self.view.bounds), 100); self.bottomItemsView.frame = frame; CGSize size = CGSizeMake(65, 87); _btnFlash.bounds = CGRectMake(0, 0, size.width, size.height); _btnFlash.center = CGPointMake(CGRectGetWidth(_bottomItemsView.frame)/2, CGRectGetHeight(_bottomItemsView.frame)/2); _btnPhoto.bounds = _btnFlash.bounds; _btnPhoto.center = CGPointMake(CGRectGetWidth(_bottomItemsView.frame)/4, CGRectGetHeight(_bottomItemsView.frame)/2); _btnMyQR.bounds = _btnFlash.bounds; _btnMyQR.center = CGPointMake(CGRectGetWidth(_bottomItemsView.frame) * 3/4, CGRectGetHeight(_bottomItemsView.frame)/2); } if (_zoomView) { CGRect frame = self.view.frame; int XRetangleLeft = self.style.xScanRetangleOffset; CGSize sizeRetangle = CGSizeMake(frame.size.width - XRetangleLeft*2, frame.size.width - XRetangleLeft*2); if (self.style.whRatio != 1) { CGFloat w = sizeRetangle.width; CGFloat h = w / self.style.whRatio; NSInteger hInt = (NSInteger)h; h = hInt; sizeRetangle = CGSizeMake(w, h); } //扫码区域Y轴最小坐标 CGFloat YMinRetangle = frame.size.height / 2.0 - sizeRetangle.height/2.0 - self.style.centerUpOffset; CGFloat YMaxRetangle = YMinRetangle + sizeRetangle.height; CGFloat zoomw = sizeRetangle.width + 40; _zoomView.frame = CGRectMake((CGRectGetWidth(self.view.frame)-zoomw)/2, YMaxRetangle + 40, zoomw, 18); } } - (void)viewDidAppear:(BOOL)animated { [super viewDidAppear:animated]; [self drawBottomItems]; [self drawTitle]; } //绘制扫描区域 - (void)drawTitle { if (!_topTitle) { self.topTitle = [[UILabel alloc]init]; _topTitle.bounds = CGRectMake(0, 0, 145, 60); _topTitle.center = CGPointMake(CGRectGetWidth(self.view.frame)/2, 50); //3.5inch iphone if ([UIScreen mainScreen].bounds.size.height <= 568 ) { _topTitle.center = CGPointMake(CGRectGetWidth(self.view.frame)/2, 38); _topTitle.font = [UIFont systemFontOfSize:14]; } _topTitle.textAlignment = NSTextAlignmentCenter; _topTitle.numberOfLines = 0; _topTitle.text = @"将取景框对准二维码即可自动扫描"; _topTitle.textColor = [UIColor whiteColor]; // [self.view addSubview:_topTitle]; [self.view insertSubview:_topTitle atIndex:3]; } } - (void)cameraInitOver { if (self.isVideoZoom) { [self zoomView]; } } - (void)setVideoMaxScale:(CGFloat)maxScale { if (_isVideoZoom) { self.maxVideoScale = maxScale; dispatch_async(dispatch_get_main_queue(), ^{ [self zoomView]; }); } } - (LBXScanVideoZoomView*)zoomView { if (!_zoomView) { CGRect frame = self.view.frame; int XRetangleLeft = self.style.xScanRetangleOffset; CGSize sizeRetangle = CGSizeMake(frame.size.width - XRetangleLeft*2, frame.size.width - XRetangleLeft*2); if (self.style.whRatio != 1) { CGFloat w = sizeRetangle.width; CGFloat h = w / self.style.whRatio; NSInteger hInt = (NSInteger)h; h = hInt; sizeRetangle = CGSizeMake(w, h); } //扫码区域Y轴最小坐标 CGFloat YMinRetangle = frame.size.height / 2.0 - sizeRetangle.height/2.0 - self.style.centerUpOffset; CGFloat YMaxRetangle = YMinRetangle + sizeRetangle.height; CGFloat zoomw = sizeRetangle.width + 40; _zoomView = [[LBXScanVideoZoomView alloc]initWithFrame:CGRectMake((CGRectGetWidth(self.view.frame)-zoomw)/2, YMaxRetangle + 40, zoomw, 18)]; [_zoomView setMaximunValue:self.maxVideoScale/2]; __weak __typeof(self) weakSelf = self; _zoomView.block= ^(float value) { [weakSelf.scanObj setVideoScale:value]; }; [self.view insertSubview:_zoomView atIndex:3]; UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(tap)]; [self.view addGestureRecognizer:tap]; } return _zoomView; } - (void)tap { _zoomView.hidden = !_zoomView.hidden; } - (void)drawBottomItems { if (_bottomItemsView) { return; } CGRect frame = CGRectMake(0, CGRectGetMaxY(self.view.bounds)-100, CGRectGetWidth(self.view.bounds), 100); self.bottomItemsView = [[UIView alloc]initWithFrame:frame]; _bottomItemsView.backgroundColor = [UIColor colorWithRed:0 green:0 blue:0 alpha:0.6]; #if TARGET_IPHONE_SIMULATOR _bottomItemsView.backgroundColor = [UIColor colorWithRed:1 green:1 blue:1 alpha:0.5]; #endif [self.view insertSubview:_bottomItemsView atIndex:3]; CGSize size = CGSizeMake(65, 87); self.btnFlash = [[UIButton alloc]init]; _btnFlash.bounds = CGRectMake(0, 0, size.width, size.height); _btnFlash.center = CGPointMake(CGRectGetWidth(_bottomItemsView.frame)/2, CGRectGetHeight(_bottomItemsView.frame)/2); [_btnFlash setImage:[UIImage imageNamed:@"CodeScan.bundle/qrcode_scan_btn_flash_nor"] forState:UIControlStateNormal]; [_btnFlash addTarget:self action:@selector(openOrCloseFlash) forControlEvents:UIControlEventTouchUpInside]; self.btnPhoto = [[UIButton alloc]init]; _btnPhoto.bounds = _btnFlash.bounds; _btnPhoto.center = CGPointMake(CGRectGetWidth(_bottomItemsView.frame)/4, CGRectGetHeight(_bottomItemsView.frame)/2); [_btnPhoto setImage:[UIImage imageNamed:@"CodeScan.bundle/qrcode_scan_btn_photo_nor"] forState:UIControlStateNormal]; [_btnPhoto setImage:[UIImage imageNamed:@"CodeScan.bundle/qrcode_scan_btn_photo_down"] forState:UIControlStateHighlighted]; [_btnPhoto addTarget:self action:@selector(openPhoto) forControlEvents:UIControlEventTouchUpInside]; self.btnMyQR = [[UIButton alloc]init]; _btnMyQR.bounds = _btnFlash.bounds; _btnMyQR.center = CGPointMake(CGRectGetWidth(_bottomItemsView.frame) * 3/4, CGRectGetHeight(_bottomItemsView.frame)/2); [_btnMyQR setImage:[UIImage imageNamed:@"CodeScan.bundle/qrcode_scan_btn_myqrcode_nor"] forState:UIControlStateNormal]; [_btnMyQR setImage:[UIImage imageNamed:@"CodeScan.bundle/qrcode_scan_btn_myqrcode_down"] forState:UIControlStateHighlighted]; [_btnMyQR addTarget:self action:@selector(myQRCode) forControlEvents:UIControlEventTouchUpInside]; [_bottomItemsView addSubview:_btnFlash]; [_bottomItemsView addSubview:_btnPhoto]; [_bottomItemsView addSubview:_btnMyQR]; } #pragma mark -底部功能项 //打开相册 - (void)openPhoto { __weak __typeof(self) weakSelf = self; [LBXPermission authorizeWithType:LBXPermissionType_Photos completion:^(BOOL granted, BOOL firstTime) { if (granted) { [weakSelf openLocalPhoto:NO]; } else if (!firstTime ) { [LBXPermissionSetting showAlertToDislayPrivacySettingWithTitle:@"提示" msg:@"没有相册权限,是否前往设置" cancel:@"取消" setting:@"设置"]; } }]; } //开关闪光灯 - (void)openOrCloseFlash { [super openOrCloseFlash]; if (self.isOpenFlash) { [_btnFlash setImage:[UIImage imageNamed:@"CodeScan.bundle/qrcode_scan_btn_flash_down"] forState:UIControlStateNormal]; } else [_btnFlash setImage:[UIImage imageNamed:@"CodeScan.bundle/qrcode_scan_btn_flash_nor"] forState:UIControlStateNormal]; } #pragma mark -底部功能项 - (void)myQRCode { CreateBarCodeViewController *vc = [CreateBarCodeViewController new]; [self.navigationController pushViewController:vc animated:YES]; } @end