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 界面的轻量级二维码扫描及生成框架
+
+
+
+
## 功能
* 提供一个导航控制器,扫描 `二维码 / 条形码`
* 能够生成指定 `字符串` + `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