二维码扫描,生成

二维码扫描:

#import "AVFViewController.h"


#import <AVFoundation/AVFoundation.h>


staticconst char *kScanQRCodeQueueName ="ScanQRCodeQueue";


@interface AVFViewController () <AVCaptureMetadataOutputObjectsDelegate>


//扫描视图

@property (weak, nonatomic) IBOutletUIView *sanFrameView;

//开始扫描按钮

@property (weak, nonatomic) IBOutletUIButton *button;

//扫描结果显示

@property (weak, nonatomic) IBOutletUILabel *resultL;


@property (nonatomic)AVCaptureSession *captureSession;

@property (nonatomic)AVCaptureVideoPreviewLayer *videoPreviewLayer;

@property (nonatomic)BOOL lastResut;

@end


@implementation AVFViewController


- (void)viewDidLoad

{

    [superviewDidLoad];

    [_buttonsetTitle:@"开始"forState:UIControlStateNormal];

    _lastResut = YES;

}


- (void)dealloc

{

    [selfstopReading];

}



- (BOOL)startReading

{

    [_buttonsetTitle:@"停止"forState:UIControlStateNormal];

    // 获取 AVCaptureDevice 实例

   NSError * error;

    AVCaptureDevice *captureDevice = [AVCaptureDevicedefaultDeviceWithMediaType:AVMediaTypeVideo];

    // 初始化输入流

   AVCaptureDeviceInput *input = [AVCaptureDeviceInputdeviceInputWithDevice:captureDevice error:&error];

   if (!input) {

        NSLog(@"%@", [errorlocalizedDescription]);

       return NO;

    }

    // 创建会话

    _captureSession = [[AVCaptureSessionalloc] init];

    // 添加输入流

    [_captureSessionaddInput:input];

    // 初始化输出流

    AVCaptureMetadataOutput *captureMetadataOutput = [[AVCaptureMetadataOutputalloc] init];

    // 添加输出流

    [_captureSessionaddOutput:captureMetadataOutput];

    

    // 创建dispatch queue.

   dispatch_queue_t dispatchQueue;

    dispatchQueue =dispatch_queue_create(kScanQRCodeQueueName,NULL);

    [captureMetadataOutputsetMetadataObjectsDelegate:selfqueue:dispatchQueue];

    // 设置元数据类型 AVMetadataObjectTypeQRCode

    [captureMetadataOutput setMetadataObjectTypes:[NSArrayarrayWithObject:AVMetadataObjectTypeQRCode]];

    

    // 创建输出对象

    _videoPreviewLayer = [[AVCaptureVideoPreviewLayeralloc] initWithSession:_captureSession];

    [_videoPreviewLayersetVideoGravity:AVLayerVideoGravityResizeAspectFill];

    [_videoPreviewLayersetFrame:_sanFrameView.layer.bounds];

    [_sanFrameView.layeraddSublayer:_videoPreviewLayer];

    // 开始会话

    [_captureSessionstartRunning];

    

    return YES;

}


- (void)stopReading

{

    [_buttonsetTitle:@"开始"forState:UIControlStateNormal];

    // 停止会话

    [_captureSessionstopRunning];

    _captureSession =nil;

}


- (void)reportScanResult:(NSString *)result

{

    [selfstopReading];

   if (!_lastResut) {

       return;

    }

    _lastResut = NO;

   self.resultL.text=result;

    //以及处理了结果,下次扫描

    _lastResut = YES;

}


#pragma AVCaptureMetadataOutputObjectsDelegate


-(void)captureOutput:(AVCaptureOutput *)captureOutput didOutputMetadataObjects:(NSArray *)metadataObjects

      fromConnection:(AVCaptureConnection *)connection

{

   if (metadataObjects != nil && [metadataObjects count] > 0) {

       AVMetadataMachineReadableCodeObject *metadataObj = [metadataObjectsobjectAtIndex:0];

       NSString *result;

       if ([[metadataObj type] isEqualToString:AVMetadataObjectTypeQRCode]) {

            result = metadataObj.stringValue;

        }else {

           NSLog(@"不是二维码");

        }

        [selfperformSelectorOnMainThread:@selector(reportScanResult:)withObject:result waitUntilDone:NO];

    }

}

- (IBAction)startScanner:(id)sender

{

   UIButton *button = (UIButton *)sender;

   if ([button.titleLabel.textisEqualToString:@"开始"]) {

        [selfstartReading];

    }else {

        [selfstopReading];

    }

}


AVFoundation:

#import "CreateViewController.h"


#import "QRCodeGenerator.h"


@interface CreateViewController ()


@property (weak, nonatomic) IBOutletUIImageView *outImageV;

@property (weak, nonatomic) IBOutletUITextField *contentTF;

@end


@implementation CreateViewController


- (void)viewDidLoad {

    [superviewDidLoad];

    // Do any additional setup after loading the view.

}

- (IBAction)createQRCImg:(id)sender {

    UIImage * image=[QRCodeGeneratorqrImageForString:self.contentTF.textimageSize:200];

    NSLog(@"尺寸:%@",NSStringFromCGSize(image.size));

   self.outImageV.image=image;

}

生成:

#import "CreateViewController.h"


#import "QRCodeGenerator.h"


@interface CreateViewController ()


@property (weak, nonatomic) IBOutletUIImageView *outImageV;

@property (weak, nonatomic) IBOutletUITextField *contentTF;

@end


@implementation CreateViewController


- (void)viewDidLoad {

    [superviewDidLoad];

    // Do any additional setup after loading the view.

}

- (IBAction)createQRCImg:(id)sender {

    UIImage * image=[QRCodeGeneratorqrImageForString:self.contentTF.textimageSize:200];

    NSLog(@"尺寸:%@",NSStringFromCGSize(image.size));

   self.outImageV.image=image;

}




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值