Giter Club home page Giter Club logo

sgqrcode's Introduction

SGQRCode

Version UIKit Use
3.5x iOS 9.0+ Block
4.x iOS 11.0+ Delegate

主要功能

生成二维码

扫描二维码

捕获内容缩放功能

图片中识别二维码

相机、相册权限判断

根据光线强弱开启关闭手电筒

扫描成功后界面间的逻辑跳转处理

扫描界面可高度自定义(满足所有主流app)

主要类说明

类名 说明
SGScanCode 扫描二维码
SGScanViewConfigure 扫描视图配置
SGScanView 扫描视图
SGPermission 相册、相机权限管理
SGTorch 手电筒管理
SGQRCodeLog 调试日志

SGQRCode 集成流程

手动集成

添加 SGQRCode 文件夹到工程中

通过 CocoaPods 集成

pod 'SGQRCode', '~> 4.1.0'

Info.plist 添加以下字段

NSCameraUsageDescription (相机权限访问)

NSPhotoLibraryUsageDescription (相册权限访问)

引用头文件

#import <SGQRCode/SGQRCode.h>

扫描二维码相关代码

// 创建二维码扫描类
scanCode = [SGScanCode scanCode];

// 预览视图,必须设置
scanCode.preview = self.view;

// 遵循 SGScanCodeDelegate
scanCode.delegate = self;

// 遵循 SGScanCodeSampleBufferDelegate
scanCode.sampleBufferDelegate = self;

// 开启扫描
[scanCode startRunning];

// 结束扫描
[scanCode stopRunning];

Delegate 方法

// SGScanCodeDelegate
- (void)scanCode:(SGScanCode *)scanCode result:(NSString *)result {
    <#code#>
}

// SGScanCodeSampleBufferDelegate
- (void)scanCode:(SGScanCode *)scanCode brightness:(CGFloat)brightness {
    <#code#>
}

图片中识别二维码方法

[scanCode readQRCode:image completion:^(NSString *result) {
    <#code#>
}];

生成二维码相关方法

// 普通二维码生成方法
[SGGenerateQRCode generateQRCodeWithData:data size:size];

// 带 logo 的二维码生成方法
[SGGenerateQRCode generateQRCodeWithData:data size:size logoImage:logoImage ratio:ratio];

效果图

问题及解决方案

  • 若在使用 CocoaPods 安装第三方时,出现 [!] Unable to find a specification for SGQRCode 提示时,打开终端先输入 pod repo remove master;执行完毕后再输入 pod setup 即可 (可能会等待一段时间)

  • CIDetector 类只能识别图片中的二维码,目前暂不支持识别图片中的条形码 解决方案

更新说明

  • 2021-07-05 :v3.5.1 版本重构:修复 #163 问题,更多内容请在 releases 中查看

  • 2022-07-16 :v4.0.0 版本重构:Delegate 取代 Block,新增手动对焦功能,优化拓展扫描视图,更多内容请在 releases 中查看

  • 2022-07-16 :v4.1.0 优化SGScanView内部代码逻辑,修复无扫描线时,导致程序崩溃问题

License

SGQRCode is released under the Apache License 2.0. See LICENSE for details.

sgqrcode's People

Contributors

kingsic avatar liaoxiaoyue avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

sgqrcode's Issues

模拟器种运行报错

在模拟器中运行报错:
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[AVCaptureSession addInput:] Can't add a nil AVCaptureInput'
*** First throw call stack:
怎么解决?

SGQRCodeScanningVC模块封装

你好!你的SGQRCodeScanningVC是一个控制器,我现在想封装成一个轻量级的独立模块,同时又留足够多的接口供外界调用。扫描需要用到input output session previewLayer及其delegate,我想把这个封装成CALayer的子类,但是在设置时遇到很多问题

建议:二维码扫描结果处理自定义和加入pod

首先谢谢作者提供了这样一个很好的封装。
我就拷贝文件夹直接拿过来用了,但是因为和demo是紧密联系在一起的,所以我还要自己用闭包来自己处理结果,虽然工作量不大,但是希望作者可以把这个封装的结果处理交给开发者,甚至把这个加入pod中进行管理

文本二维码文字太多问题

让很多文字生成一个二维码,二维码密度增加,这种情况下怎么处理呢?我试的时候发现一直在扫描页面,没有什么反应,大概在700字以上文字生成的二维码扫描时就这样了,想问问大神有没有这一块的处理。

生成一张带有logo的二维码logo并没有添加上去

imageView.image = [SGQRCodeTool SG_generateWithLogoQRCodeData:@"https://github.com/kingsic" logoImageName:@"logoImg" logoScaleToSuperView:scale]; scale设置了,在模拟器中普通的和带色彩的二维码生成没问题,带logo的二维码和普通二维码一致,logo并没有加上去

内存泄漏

  1. CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceGray();
  2. CGImageRef scaledImage = CGBitmapContextCreateImage(bitmapRef);

这两句存在内存泄漏,

需要调用相关release方法释放内存

  1. CGColorSpaceRelease(colorSpace);
    
  2. CGImageRelease(scaledImage);
    

关于生成二维码的最小识别尺寸问题

我这里试了下,最小设置成80个点也就是160像素,再小的话就无法被识别了,请问是这样的吧?如果是,有没有其他方法可以设置更小点也可以被识别?

二维码存在问题

0.进入相册选择图片直接卡死
1.二维码生成数据 能否由用户自己决定 生成二维码数据采集这边希望能够补上 [集成类似二维码生成器功能 这个暂时没有发现有什么用]
2.因为二维码扫描之后的有可能要上传到电脑 类似超市二维码扫描就上传到超市电脑的功能
[二维码扫描完成之后上传到电脑的功能 因为一般电脑没有搭建相应的服务器 可以考虑TCP Socket的方式进行数据传递
传输信息类型 因为二维码数据一般不是很大 一般就是一些文字什么的 可以提供上传字符串 上传图片与字符串混合模式]
3.上个版本不需要用户修改Bundle ID 不知道为什么这一版非要修改才能进行真机功能

[self setupSGQRCodeScanning];这句话位置有点问题

改到addTimer后边,还有一些需要完善的点,比如说扑捉到数据源为空的时候,也就是二维码源不是qr的一系列处理,其他人写的啊 根本看不成,lb的那个太难分了,2.2版本简直是sb,小伙你是最棒的

viewwillappear的问题

进入扫描界面后 侧滑返回(并不完全返回到上个界面), 此时发现扫描界面卡住。建议把setupScanningQRCode放到 viewDidLoad里.

通过pod安装,扫描的小横条图片加载不到

看了一下代码,得到的图片是nil

  • (UIImageView *)scanningline {
    if (!_scanningline) {
    _scanningline = [[UIImageView alloc] init];
    _scanningline.image = [UIImage imageNamed:self.scanningImageName]; // nil
    }
    return _scanningline;
    }

从相册中选取照片识别二维码不成功

iOS10 6plus / Xcode 8 测试识别二维码不成功(不会crash)

NSArray *features = [detector featuresInImage:[CIImage imageWithCGImage:image.CGImage]];
初步判断是这个部分的问题,feature为nil,暂时没找到解决方法。

造成循环引用

- (void)SG_readQRCodeFromAlbumWithCurrentController:(UIViewController *)currentController

_self.currentVC_ = currentController;
// 1、 获取摄像设备
AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
if (device) {
    // 判断授权状态
    PHAuthorizationStatus status = [PHPhotoLibrary authorizationStatus];
    if (status == PHAuthorizationStatusNotDetermined) { // 用户还没有做出选择
        // 弹框请求用户授权
        [PHPhotoLibrary requestAuthorization:^(PHAuthorizationStatus status) {
            if (status == PHAuthorizationStatusAuthorized) { // 用户第一次同意了访问相册权限
                self.isPHAuthorization = YES;
                dispatch_async(dispatch_get_main_queue(), ^{
                    if (self.isOpenLog) {
                        SGQRCodeLog(@"第一次同意了访问相机权限 - - %@", [NSThread currentThread]);
                    }
                    UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init];
                    imagePicker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary; //(选择类型)表示仅仅从相册中选取照片
                    imagePicker.delegate = self;
                    [_self.currentVC_ presentViewController:imagePicker animated:YES completion:nil];
                });
                if (self.isOpenLog) {
                    SGQRCodeLog(@"用户第一次同意了访问相册权限 - - %@", [NSThread currentThread]);
                }
            } else { // 用户第一次拒绝了访问相机权限
                if (self.isOpenLog) {
                    SGQRCodeLog(@"用户第一次拒绝了访问相机权限 - - %@", [NSThread currentThread]);
                }
            }
        }];

pop回扫描界面界面卡主

在展示扫描结果的界面,你这边对返回的处理是直接pop到根控制器,如果返回扫描界面,扫描界面会卡住,这是为什么呢?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.