原生二维码扫描实现, 二维码、中间带小图标、条形码生成

本文分享了原生的二维码扫描及生成的代码,包括QRCodeScanView扫描视图,具备震动反馈和手电筒功能,以及QRCodeCreateTools工具类,能生成中间带小图标的二维码和条形码。提供了使用示例和效果截图,并提供完整源码下载。
摘要由CSDN通过智能技术生成

今天在review代码的时候重新整理了一下项目中的原生的二维码扫描及生成的代码,和大家分享一下。

跟大家分享的主要有两个类:
QRCodeScanView 扫描视图, 识别出信息后回有震动提示,可以打开手电筒
QRCodeCreateTools 二维码、条形码生成工具,你还可以生成中间带小图标的二维码

先看看怎么使用吧


- (void)viewDidLoad {
[super viewDidLoad];

//创建扫面视图你只需要
self.scanView = [[QRCodeScanView alloc] initWithFrame:[UIScreen mainScreen].bounds minX:0.2 minY:0.2];
[self.view insertSubview:self.scanView atIndex:0];
}

效果图:
这里写图片描述

生成一个二维码

UIImage *qrcode = [QRCodeCreateTools creatQRCodeWithUrlstring:@"这是一个二维码" imageWidth:200];

生成一个中间带小图标的二维码

UIImage *iconQrcode = [QRCodeCreateTools creatQRCodeWithUrlstring:@"这是一个带头像的二维码" imageWidth:200 withIcon:icon withScale:0.2];

效果图:

这里写图片描述

生成一个条形码

UIImage *qrcode = [QRCodeCreateTools creatBarCode:@"11234598765" width:300 height:100];

有没有 很简单! 源码来了

#import <UIKit/UIKit.h>
#import <AVFoundation/AVFoundation.h>

@interface QRCodeScanView : UIView

@property (nonatomic, strong)UILabel *detailLabel;
@property (nonatomic, strong)UILabel *descriptionLabel;

@property (nonatomic, copy)void (^scanFinishBlock)(AVCaptureOutput *captureOutput, NSArray *metadataObjects, AVCaptureConnection *connection);

/**
 *  初始化扫描视图
 *
 *  @param frame 扫描视图的frame
 *  @param minX  扫描区域距视图左边界的比例
 *  @param minY  扫描区域距视图上边界的比例
 */
- (instancetype)initWithFrame:(CGRect)frame minX:(CGFloat)minX minY:(CGFloat)minY;

/**
 *  开始扫描
 */
- (void)startScan;

/**
 *  暂停扫描
 */
- (void)stopScan;

@end
#import "QRCodeScanView.h"
#import <AudioToolbox/AudioToolbox.h>

//扫描框四个角的颜色
#define BordColor  [UIColor redColor]
//扫描线的颜色
#define ScanLineColor  [UIColor redColor]

@interface QRCodeScanView ()<AVCaptureMetadataOutputObjectsDelegate, UIAlertViewDelegate>
{
    NSTimer *_timer;
    CGFloat _minX;
    CGFloat _minY;
}

@property (nonatomic, strong)AVCaptureSession *session;
@property (nonatomic, strong)AVCaptureDeviceInput *input;
@property (nonatomic, strong)AVCaptureMetadataOutput *output;
@property (nonatomic, strong)AVCaptureVideoPreviewLayer *scanView;
@property (nonatomic, strong)UIImageView *scanLine;

@property (nonatomic, strong)UIView *boxView;
@end


@implementation QRCodeScanView


- (void)awakeFromNib
{
    [super awakeFromNib];
    _minX = 0.2;
    _minY = 0.2;
    [self setupUIWithMinX:0.2 minY:0.2];
}

- (instancetype)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self != nil) {
        _minX = 0.2;
        _minY = 0.2;
        [self setupUIWithMinX:0.2 minY:0.2];
    }
    return self;
}

- (instancetype)initWithFrame:(CGRect)frame minX:(CGFloat)minX minY:(CGFloat)minY
{
    self = [super initWithFrame:frame];
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值