ios-unity/Classes_cocos/LBXNative/QQScanNativeViewController.m
2022-11-25 15:08:47 +08:00

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