291 lines
9.1 KiB
Objective-C
291 lines
9.1 KiB
Objective-C
//
|
|
//
|
|
//
|
|
|
|
#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
|