diff --git a/HMQRCodeScanner.xcodeproj/project.pbxproj b/HMQRCodeScanner.xcodeproj/project.pbxproj index 24d43f7..c451967 100644 --- a/HMQRCodeScanner.xcodeproj/project.pbxproj +++ b/HMQRCodeScanner.xcodeproj/project.pbxproj @@ -152,7 +152,7 @@ TargetAttributes = { C2D6BCF61C377219000EC35D = { CreatedOnToolsVersion = 7.2; - DevelopmentTeam = J9XHDK444E; + DevelopmentTeam = 59B2B36X98; }; }; }; @@ -161,6 +161,7 @@ developmentRegion = English; hasScannedForEncodings = 0; knownRegions = ( + English, en, Base, ); @@ -317,7 +318,7 @@ isa = XCBuildConfiguration; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - DEVELOPMENT_TEAM = J9XHDK444E; + DEVELOPMENT_TEAM = 59B2B36X98; INFOPLIST_FILE = HMQRCodeScanner/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; @@ -330,7 +331,7 @@ isa = XCBuildConfiguration; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - DEVELOPMENT_TEAM = J9XHDK444E; + DEVELOPMENT_TEAM = 59B2B36X98; INFOPLIST_FILE = HMQRCodeScanner/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; diff --git a/HMQRCodeScanner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/HMQRCodeScanner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/HMQRCodeScanner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/HMQRCodeScanner/Base.lproj/Main.storyboard b/HMQRCodeScanner/Base.lproj/Main.storyboard index 53f9882..ea7127b 100644 --- a/HMQRCodeScanner/Base.lproj/Main.storyboard +++ b/HMQRCodeScanner/Base.lproj/Main.storyboard @@ -1,8 +1,12 @@ - - + + + + + - + + @@ -14,24 +18,24 @@ - + - + - - + @@ -40,6 +44,11 @@ + + + + + @@ -61,7 +70,7 @@ - + diff --git a/HMQRCodeScanner/QRCode/HMScanner.bundle/flashlight-off@2x.png b/HMQRCodeScanner/QRCode/HMScanner.bundle/flashlight-off@2x.png new file mode 100644 index 0000000..3b356ce Binary files /dev/null and b/HMQRCodeScanner/QRCode/HMScanner.bundle/flashlight-off@2x.png differ diff --git a/HMQRCodeScanner/QRCode/HMScanner.bundle/flashlight-on@2x.png b/HMQRCodeScanner/QRCode/HMScanner.bundle/flashlight-on@2x.png new file mode 100644 index 0000000..a28e68a Binary files /dev/null and b/HMQRCodeScanner/QRCode/HMScanner.bundle/flashlight-on@2x.png differ diff --git a/HMQRCodeScanner/QRCode/HMScannerController.h b/HMQRCodeScanner/QRCode/HMScannerController.h index 3d6e041..d7d3c77 100644 --- a/HMQRCodeScanner/QRCode/HMScannerController.h +++ b/HMQRCodeScanner/QRCode/HMScannerController.h @@ -7,6 +7,7 @@ // #import +#import "HMScannerViewController.h" /*! 扫描控制器 @@ -39,6 +40,7 @@ */ @interface HMScannerController : UINavigationController +@property (nonatomic, strong) HMScannerViewController *scannerViewController; /// 使用 `名片字符串` 实例化扫描导航控制器 /// /// @param cardName 名片字符串 diff --git a/HMQRCodeScanner/QRCode/HMScannerController.m b/HMQRCodeScanner/QRCode/HMScannerController.m index b75761c..3345f0d 100644 --- a/HMQRCodeScanner/QRCode/HMScannerController.m +++ b/HMQRCodeScanner/QRCode/HMScannerController.m @@ -7,7 +7,6 @@ // #import "HMScannerController.h" -#import "HMScannerViewController.h" #import "HMScanner.h" @implementation HMScannerController @@ -25,11 +24,11 @@ + (instancetype)scannerWithCardName:(NSString *)cardName avatar:(UIImage *)avata - (instancetype)initWithCardName:(NSString *)cardName avatar:(UIImage *)avatar completion:(void (^)(NSString *))completion { self = [super init]; if (self) { - HMScannerViewController *scanner = [[HMScannerViewController alloc] initWithCardName:cardName avatar:avatar completion:completion]; + self.scannerViewController = [[HMScannerViewController alloc] initWithCardName:cardName avatar:avatar completion:completion]; [self setTitleColor:[UIColor whiteColor] tintColor:[UIColor greenColor]]; - [self pushViewController:scanner animated:NO]; + [self pushViewController:self.scannerViewController animated:NO]; } return self; } diff --git a/HMQRCodeScanner/QRCode/HMScannerViewController.h b/HMQRCodeScanner/QRCode/HMScannerViewController.h index 99243ef..60427bd 100644 --- a/HMQRCodeScanner/QRCode/HMScannerViewController.h +++ b/HMQRCodeScanner/QRCode/HMScannerViewController.h @@ -8,9 +8,17 @@ #import + + /// 扫描控制器 @interface HMScannerViewController : UIViewController +/** 名片按钮是否隐藏 */ +@property(nonatomic,assign) BOOL hideCardButton; + +/** 手电按钮是否隐藏 */ +@property(nonatomic,assign) BOOL hideLightButton; + /// 实例化扫描控制器 /// /// @param cardName 名片字符串 diff --git a/HMQRCodeScanner/QRCode/HMScannerViewController.m b/HMQRCodeScanner/QRCode/HMScannerViewController.m index ca74c70..0bf18a2 100644 --- a/HMQRCodeScanner/QRCode/HMScannerViewController.m +++ b/HMQRCodeScanner/QRCode/HMScannerViewController.m @@ -11,6 +11,7 @@ #import "HMScannerBorder.h" #import "HMScannerMaskView.h" #import "HMScanner.h" +#import /// 控件间距 #define kControlMargin 32.0 @@ -22,6 +23,9 @@ @interface HMScannerViewController () *)info { @@ -126,6 +136,10 @@ - (void)imagePickerController:(UIImagePickerController *)picker didFinishPicking }]; } +- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker{ + [self dismissViewControllerAnimated:YES completion:nil]; +} + - (UIImage *)resizeImage:(UIImage *)image { if (image.size.width < kImageMaxSize.width && image.size.height < kImageMaxSize.height) { @@ -174,18 +188,27 @@ - (void)prepareOtherControls { [self.view addSubview:tipLabel]; // 2> 名片按钮 - UIButton *cardButton = [[UIButton alloc] init]; - - [cardButton setTitle:@"我的名片" forState:UIControlStateNormal]; - cardButton.titleLabel.font = [UIFont systemFontOfSize:15]; - [cardButton setTitleColor:self.navigationController.navigationBar.tintColor forState:UIControlStateNormal]; - - [cardButton sizeToFit]; - cardButton.center = CGPointMake(tipLabel.center.x, CGRectGetMaxY(tipLabel.frame) + kControlMargin); - - [self.view addSubview:cardButton]; - - [cardButton addTarget:self action:@selector(clickCardButton) forControlEvents:UIControlEventTouchUpInside]; + self.cardButton = [[UIButton alloc] init]; + + [self.cardButton setTitle:@"我的名片" forState:UIControlStateNormal]; + self.cardButton.titleLabel.font = [UIFont systemFontOfSize:15]; + [self.cardButton setTitleColor:self.navigationController.navigationBar.tintColor forState:UIControlStateNormal]; + + [self.cardButton sizeToFit]; + self.cardButton.center = CGPointMake(tipLabel.center.x, CGRectGetMaxY(tipLabel.frame) + kControlMargin); + + [self.view addSubview:self.cardButton]; + [self.cardButton addTarget:self action:@selector(clickCardButton) forControlEvents:UIControlEventTouchUpInside]; + + self.flashLightButton = [UIButton buttonWithType:UIButtonTypeCustom]; + [self.flashLightButton setFrame:CGRectMake((scannerBorder.frame.size.width-40)/2, scannerBorder.frame.size.height-60, 40, 40)]; + [self.flashLightButton setImage:[self imageWithName:@"flashlight-off" bundle:@"HMScanner"] + forState:UIControlStateNormal]; + [self.flashLightButton setImage:[self imageWithName:@"flashlight-on" bundle:@"HMScanner"] forState:UIControlStateSelected]; + [scannerBorder addSubview:self.flashLightButton]; + [self.flashLightButton addTarget:self action:@selector(modifyFlashLight:) forControlEvents:UIControlEventTouchUpInside]; + [self.cardButton setHidden:self.hideCardButton]; + [self.flashLightButton setHidden:self.hideLightButton]; } /// 准备扫描框 @@ -209,7 +232,6 @@ - (void)prepareNavigationBar { [self.navigationController.navigationBar setBarTintColor:[UIColor colorWithWhite:0.1 alpha:1.0]]; self.navigationController.navigationBar.translucent = YES; self.navigationController.navigationBar.shadowImage = [[UIImage alloc] init]; - // 2> 标题 self.title = @"扫一扫"; @@ -218,4 +240,38 @@ - (void)prepareNavigationBar { self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"相册" style:UIBarButtonItemStylePlain target:self action:@selector(clickAlbumButton)]; } +#pragma mark - 封装处理 + +- (UIImage *)imageWithName:(NSString *)imageName bundle:(NSString *)bundleName { + ///https://github.com/20120608/QM_HMQRCodeScanner + NSBundle *bundle = [NSBundle bundleForClass:[self class]]; + NSURL *url = [bundle URLForResource:bundleName withExtension:@"bundle"]; + NSBundle *imageBundle = [NSBundle bundleWithURL:url]; + NSString *fileName = [NSString stringWithFormat:@"%@@2x", imageName]; + NSString *path = [imageBundle pathForResource:fileName ofType:@"png"]; + return [[UIImage imageWithContentsOfFile:path] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]; +} + +- (BOOL)modifyFlashLight { + AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo]; + //修改前必须先锁定 + [device lockForConfiguration:nil]; + //必须判定是否有闪光灯,否则如果没有闪光灯会崩溃 + BOOL isopen = false; + if ([device hasFlash]) { + if (device.flashMode == AVCaptureFlashModeOff) { + device.flashMode = AVCaptureFlashModeOn; + device.torchMode = AVCaptureTorchModeOn; + isopen = true; + } else if (device.flashMode == AVCaptureFlashModeOn) { + device.flashMode = AVCaptureFlashModeOff; + device.torchMode = AVCaptureTorchModeOff; + isopen = false; + } + } + [device unlockForConfiguration]; + return isopen; +} + + @end diff --git a/HMQRCodeScanner/ViewController.m b/HMQRCodeScanner/ViewController.m index 44f6f3d..0c60cd9 100644 --- a/HMQRCodeScanner/ViewController.m +++ b/HMQRCodeScanner/ViewController.m @@ -15,19 +15,23 @@ @interface ViewController () @end @implementation ViewController +- (IBAction)myQRCodeAction:(UIBarButtonItem *)sender { + [self show:NO]; +} - (IBAction)clickScanButton:(id)sender { - + [self show:YES]; +} + +- (void)show:(BOOL)show{ NSString *cardName = @"天涯刀哥 - 傅红雪"; UIImage *avatar = [UIImage imageNamed:@"avatar"]; - HMScannerController *scanner = [HMScannerController scannerWithCardName:cardName avatar:avatar completion:^(NSString *stringValue) { self.scanResultLabel.text = stringValue; }]; - + scanner.scannerViewController.hideCardButton = show; [scanner setTitleColor:[UIColor whiteColor] tintColor:[UIColor greenColor]]; - [self showDetailViewController:scanner sender:nil]; } diff --git a/README.md b/README.md index 70acc6c..bab7c02 100644 --- a/README.md +++ b/README.md @@ -2,11 +2,16 @@ 包含 UI 界面的轻量级二维码扫描及生成框架 + + +![扫描二维码](https://raw.githubusercontent.com/sauteam/HMQRCodeScanner/master/intro.jpeg) + ## 功能 * 提供一个导航控制器,扫描 `二维码 / 条形码` * 能够生成指定 `字符串` + `avatar(可选)` 的二维码名片 * 能够识别相册图片中的二维码(iOS 64 位设备) +* 支持闪光灯 ## 系统支持 @@ -84,6 +89,8 @@ UIImage *avatar = [UIImage imageNamed:@"avatar"]; }]; ``` + + ### Swift * 导入框架 @@ -116,3 +123,8 @@ HMScannerController.cardImageWithCardName(cardName, avatar: avatar, scale: 0.2) } ``` + + +### Special Thanks + + \ No newline at end of file diff --git a/intro.jpeg b/intro.jpeg new file mode 100644 index 0000000..aae3db8 Binary files /dev/null and b/intro.jpeg differ