• Stars
    star
    102
  • Rank 334,278 (Top 7 %)
  • Language
    Objective-C
  • License
    MIT License
  • Created over 6 years ago
  • Updated almost 5 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

功能描述:WSLNativeScanTool是在利用原生API的条件下封装的二维码扫描工具,支持二维码的扫描、识别图中二维码、生成自定义颜色和中心图标的二维码、监测环境亮度、打开闪光灯这些功能;WSLScanView是参照微信封装的一个扫一扫界面,支持线条颜色、大小、动画图片、矩形扫描框样式的自定义;这个示例本身就是仿照微信的扫一扫功能实现的。

WSLNativeScanTool

简书地址:https://www.jianshu.com/u/e15d1f644bea

效果预览1.gif 效果预览2.gif

功能描述:WSLNativeScanTool是在利用原生API的条件下封装的二维码扫描工具,支持二维码的扫描、识别图中二维码、生成自定义颜色和中心图标的二维码、监测环境亮度、打开闪光灯这些功能;WSLScanView是参照微信封装的一个扫一扫界面,支持线条颜色、大小、动画图片、矩形扫描框样式的自定义;这个示例本身就是仿照微信的扫一扫功能实现的。

  • 详细实现就不在此唠叨了,直接去看代码吧,注释详细是我的习惯😀→WSLNativeScanTool
  • 来看一下WSLNativeScanTool.h ,用法很明朗
@import UIKit;
@import AVFoundation;

#import <Foundation/Foundation.h>

/**
 扫描完成的回调
 @param scanString 扫描出的字符串
 */
typedef void(^WSLScanFinishedBlock)( NSString * _Nullable scanString);

/**
 监听环境光感的回调
 @param brightness 亮度值
 */
typedef void(^WSLMonitorLightBlock)( float brightness);

@interface WSLNativeScanTool : NSObject

/**
 扫描出结果后的回调 ,注意循环引用的问题
 */
@property (nonatomic, copy) WSLScanFinishedBlock _Nullable scanFinishedBlock;

/**
 监听环境光感的回调,如果 != nil 表示开启监测环境亮度功能
 */
@property (nonatomic, copy) WSLMonitorLightBlock _Nullable monitorLightBlock;

/**
 闪光灯的状态,不需要设置,仅供外边判断状态使用
 */
@property (nonatomic, assign) BOOL flashOpen;

/**
 初始化 扫描工具
 @param preview 展示输出流的视图
 @param scanFrame 扫描中心识别区域范围
 */
- (instancetype )initWithPreview:(UIView *)preview andScanFrame:(CGRect)scanFrame;

/**
 闪光灯开关
 */
- (void)openFlashSwitch:(BOOL)open;

- (void)sessionStartRunning;

- (void)sessionStopRunning;

/**
 识别图中二维码
 */
- (void)scanImageQRCode:(UIImage *_Nullable)imageCode;

/**
 生成自定义样式二维码
 注意:有些颜色结合生成的二维码识别不了
 @param codeString 字符串
 @param size 大小
 @param backColor 背景色
 @param frontColor 前景色
 @param centerImage 中心图片
 @return image二维码
 */
+ (UIImage *)createQRCodeImageWithString:(nonnull NSString *)codeString andSize:(CGSize)size andBackColor:(nullable UIColor *)backColor andFrontColor:(nullable UIColor *)frontColor andCenterImage:(nullable UIImage *)centerImage;

  • 再来看一下WSLScanView.h,用法也明朗😁
//
//  WSLScanView.h
//  ScanQRcode
//
//  Created by 王双龙 on 2018/2/28.
//  Copyright © 2018年 https://www.jianshu.com/u/e15d1f644bea
All rights reserved.
//

#import <UIKit/UIKit.h>

typedef void(^WSLMyQRCodeBlock)(void);

typedef void(^WSLFlashSwitchBlock)(BOOL open);

@interface WSLScanView : UIView

/**
 点击我的二维码的回调
 */
@property (nonatomic,copy) WSLMyQRCodeBlock myQRCodeBlock;

/**
 打开/关闭闪光灯的回调
 */
@property (nonatomic,copy) WSLFlashSwitchBlock flashSwitchBlock;

#pragma mark - 扫码区域

/**
 扫码区域 默认为正方形,x = 60, y = 100
 */
@property (nonatomic,assign)CGRect scanRetangleRect;
/**
 @brief  是否需要绘制扫码矩形框,默认YES
 */
@property (nonatomic, assign) BOOL isNeedShowRetangle;
/**
 @brief  矩形框线条颜色
 */
@property (nonatomic, strong, nullable) UIColor *colorRetangleLine;

#pragma mark - 矩形框(扫码区域)周围4个角

//4个角的颜色
@property (nonatomic, strong, nullable) UIColor* colorAngle;
//扫码区域4个角的宽度和高度 默认都为20
@property (nonatomic, assign) CGFloat photoframeAngleW;
@property (nonatomic, assign) CGFloat photoframeAngleH;
/**
 @brief  扫码区域4个角的线条宽度,默认6
 */
@property (nonatomic, assign) CGFloat photoframeLineW;

#pragma mark --动画效果

/**
 *  动画效果的图像
 */
@property (nonatomic,strong, nullable) UIImage * animationImage;
/**
 非识别区域颜色,默认 RGBA (0,0,0,0.5)
 */
@property (nonatomic, strong, nullable) UIColor * notRecoginitonArea;

/**
 *  开始扫描动画
 */
- (void)startScanAnimation;
/**
 *  结束扫描动画
 */
- (void)stopScanAnimation;

/**
 正在处理扫描到的结果
 */
- (void)handlingResultsOfScan;

/**
 完成扫描结果处理
 */
- (void)finishedHandle;

/**
 是否显示闪光灯开关
 @param show YES or NO
 */
- (void)showFlashSwitch:(BOOL)show;
@end

  • 初始化WSLNativeScanTool和WSLScanView
//输出流视图
    UIView *preview  = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height - 0)];
    [self.view addSubview:preview];
    
    __weak typeof(self) weakSelf = self;
    
    //构建扫描样式视图
    _scanView = [[WSLScanView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height - 0)];
    _scanView.scanRetangleRect = CGRectMake(60, 120, (self.view.frame.size.width - 2 * 60),  (self.view.frame.size.width - 2 * 60));
    _scanView.colorAngle = [UIColor greenColor];
    _scanView.photoframeAngleW = 20;
    _scanView.photoframeAngleH = 20;
    _scanView.photoframeLineW = 2;
    _scanView.isNeedShowRetangle = YES;
    _scanView.colorRetangleLine = [UIColor whiteColor];
    _scanView.notRecoginitonArea = [UIColor colorWithRed:0 green:0 blue:0 alpha:0.5];
    _scanView.animationImage = [UIImage imageNamed:@"scanLine"];
    _scanView.myQRCodeBlock = ^{
     [WSLNativeScanTool createQRCodeImageWithString:@"https://www.jianshu.com/u/e15d1f644bea" andSize:CGSizeMake(250, 250) andBackColor:[UIColor whiteColor] andFrontColor:[UIColor orangeColor] andCenterImage:[UIImage imageNamed:@"piao"]];
        createQRCodeController.qrString = @"https://www.jianshu.com/u/e15d1f644bea";
    };
    _scanView.flashSwitchBlock = ^(BOOL open) {
        [weakSelf.scanTool openFlashSwitch:open];
    };
    [self.view addSubview:_scanView];
    
    //初始化扫描工具
    _scanTool = [[WSLNativeScanTool alloc] initWithPreview:preview andScanFrame:_scanView.scanRetangleRect];
    _scanTool.scanFinishedBlock = ^(NSString *scanString) {
        NSLog(@"扫描结果 %@",scanString);
        [weakSelf.scanTool sessionStopRunning];
        [weakSelf.scanTool openFlashSwitch:NO];
    };
    _scanTool.monitorLightBlock = ^(float brightness) {
        NSLog(@"环境光感 : %f",brightness);
        if (brightness < 0) {
            // 环境太暗,显示闪光灯开关按钮
            [weakSelf.scanView showFlashSwitch:YES];
        }else if(brightness > 0){
            // 环境亮度可以,且闪光灯处于关闭状态时,隐藏闪光灯开关
            if(!weakSelf.scanTool.flashOpen){
                [weakSelf.scanView showFlashSwitch:NO];
            }
        }
    };
    [_scanTool sessionStartRunning];
    [_scanView startScanAnimation];
    

赞.gif

Welcome To Follow Me

您的follow和start,是我前进的动力,Thanks♪(・ω・)ノ

欢迎扫描下方二维码关注——iOS开发进阶之路——微信公众号:iOS2679114653 本公众号是一个iOS开发者们的分享,交流,学习平台,会不定时的发送技术干货,源码,也欢迎大家积极踊跃投稿,(择优上头条) ^_^分享自己开发攻城的过程,心得,相互学习,共同进步,成为攻城狮中的翘楚!

iOS开发进阶之路.jpg

More Repositories

1

iOS_Tips

iOS的一些示例,持续更新中:1、AVFoundation 高仿微信相机拍摄和编辑 2、AVFoundation 人脸检测、实时滤镜、音视频编解码、GPUImage框架的使用等音视频相关内容 3、OpenGLES 4、LeetCode算法练习 5、iOS Crash防护和APM监控 6、WKWebView相关的内容 等........
Objective-C
1,217
star
2

WKWebView

WKWebView的使用、JS和OC的交互、网页内容加载进度条的实现、WKWebView+UITableView混排 、 WKWebView离线缓存
Objective-C
474
star
3

WSLWaterFlowLayout

功能描述:WSLWaterFlowLayout 是在继承于UICollectionViewLayout的基础上封装的控件, 目前支持竖向瀑布流(item等宽不等高、支持头脚视图)、水平瀑布流(item等高不等宽 不支持头脚视图)、竖向瀑布流( item等高不等宽、支持头脚视图)、栅格布局瀑布流 4种样式的瀑布流布局。
Objective-C
333
star
4

LyricsAnalysis

iOS音乐播放器之锁屏效果(仿网易云音乐和QQ音乐)+歌词解析 :锁屏歌曲信息、控制台远程控制音乐播放:暂停/播放、上一首/下一首、快进/快退、列表菜单弹框和拖拽控制台的进度条调节进度(结合了QQ音乐和网易云音乐在锁屏状态下的效果)、歌词解析并随音乐滚动显示。
Objective-C
195
star
5

UIActivityViewController

仿简书分享--系统原生分享:利用UIActivityViewController实现系统原生分享,不需要三方SDK,支持自定义分享,可以分享到微博、微信、QQ、信息、邮件、备忘录、通讯录、剪贴板、FaceBook.....等等
Objective-C
150
star
6

WSLTransferAnimation

iOS 自定义转场动画集锦:新浪微博图片浏览转场效果、网易云音乐启动屏转场动画、手势过渡动画、开关门动画、全屏侧滑Pop返回和UIScrollView、UISlider三者手势滑动事件冲突
Objective-C
143
star
7

UITableViewLinkage

iOS UITableView/UICollectionView获取特定位置的cell,解决UITableView/UICollectionView联动、获取处于UITableView/UICollectionView中心的cell等这类与特定cell位置有关的问题
Objective-C
76
star
8

UIScrollViewAnimation

UIScrollView视觉差动画,仿凤凰新闻的推荐新闻版块效果
Objective-C
72
star
9

SwiftStudy

Swift学习之微博朋友圈列表功能实现
Swift
70
star
10

WSLAPP

音乐播放器,新闻,壁纸,画板,二维码,计分器,一个我自己做的完整的项目源码
Objective-C
62
star
11

MultilevelList

TableView多级列表:分级展开或合并,逐级获取并展示其子级数据,可以设置最大的层级数,支持多选、单选、取消选择。
Objective-C
61
star
12

SensorDemo

指纹识别、运动传感器、加速计、环境光感、距离传感器、指南针、陀螺仪等传感器示例集锦
Objective-C
58
star
13

WSL_RollView

功能描述:WSL_RollView 是基于UICollectionView实现的支持水平和垂直两个方向上的的分页和渐进循环轮播效果,可以设置时间间隔、渐进速率、是否循环、分页宽度和间隔,还支持高度自定义分页视图的控件。
Objective-C
57
star
14

Compass

高仿系统指南针效果
Objective-C
31
star
15

CoreDataLearn

CoreData增删改查、数据库升级
Objective-C
27
star
16

WSLPictureBrowser

功能描述:支持网络和本地gif、jpeg等格式图片的浏览、捏合或双击放大缩小、长按保存到本地相册、获取gif图片的循环次数和时长。
Objective-C
26
star
17

AlgorithmSet

LeetCode 算法练习集合 ~ 每天一道算法题
Swift
19
star
18

YanZhengCode

图片验证码和滑块验证码
Objective-C
12
star
19

ContactsSort

通讯录排序,类似微信通讯录
Objective-C
9
star
20

GOVAVPlayer

GOVVideoPlayer/GOVVideoController是一个基于AVPlayer封装的视频播放器,支持播放/暂停、左右退拽快进、上下滑动调节音量、有缓冲进度指示条、和卡顿指示器.
Objective-C
7
star
21

AppIconBadge

解决在前台时重启应用和设置应用角标的问题
Objective-C
6
star
22

Draw

涂鸦画板:画笔颜色、粗细、橡皮擦、撤销功能等
Objective-C
6
star
23

WSLScrollView

UIScrollerView当前显示3张图:这是在继承UIView的基础上利用UIScrollerView进行了封装,支持循环轮播、自动轮播、自定义时间间隔、图片间隔、当前页码和图片大小,采用Block返回当前页码和处理当前点击事件的一个View。
Objective-C
2
star
24

Wsl2Ls.github.io

欢迎来前往我的博客查看效果 https://wsl2ls.github.io 或者我的简书:https://www.jianshu.com/p/55bf6559aa93
HTML
1
star
25

iOS_TipsPreview

iOS_Tips系列效果预览图,示例代码主工程在 https://github.com/wsl2ls/iOS_Tips
1
star
26

iOS10NotificationAndRegularExpression

iOS10通知和正则表达式
Objective-C
1
star
27

progressLabelAndWaterProgress

水波纹进度和文字进度动画以及镂空文字
1
star
28

AlarmClock

闹铃,刮刮乐,拼图
Objective-C
1
star
29

APPInternational

APP国际化
Objective-C
1
star
30

MVx

MVC、MVP、MVVM 比较
Objective-C
1
star