美文网首页
iOS开发扫描二维码

iOS开发扫描二维码

作者: Michael_NO1 | 来源:发表于2017-11-03 17:09 被阅读12次

首先要引入AVFoundation框架并遵守AVCaptureMetadataOutputObjectsDelegate协议, 通过代理方法获取扫描结果

#import <AVFoundation/AVFoundation.h>
@interface ViewController ()<AVCaptureMetadataOutputObjectsDelegate>

@property (nonatomic, strong) AVCaptureSession *session;
@property (nonatomic, strong) AVCaptureVideoPreviewLayer *previewLayer;
@property (weak, nonatomic) IBOutlet UITextField *textField;

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    
    [self action];
}


- (void)action {
    // 1
    AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
    // 2
    AVCaptureDeviceInput *input = [AVCaptureDeviceInput deviceInputWithDevice:device error:nil];
    // 3
    AVCaptureMetadataOutput *output = [[AVCaptureMetadataOutput alloc] init];
    // 4
    [output setMetadataObjectsDelegate:self queue:dispatch_get_main_queue()];
    
    output.rectOfInterest = CGRectMake(0.05, 0.2, 0.7, 0.6);
    // 5
    self.session = [[AVCaptureSession alloc] init];
    
    [_session addInput:input];
    
    [_session addOutput:output];
    
    // 6
    output.metadataObjectTypes = @[AVMetadataObjectTypeQRCode,AVMetadataObjectTypeEAN13Code,AVMetadataObjectTypeEAN8Code,AVMetadataObjectTypeCode128Code];
    
    // 7
    self.previewLayer = [AVCaptureVideoPreviewLayer layerWithSession:_session];
    _previewLayer.videoGravity = AVLayerVideoGravityResizeAspectFill;
    _previewLayer.frame = self.view.layer.bounds;
    
    [self.view.layer insertSublayer:_previewLayer atIndex:0];
    
    [_session startRunning];
    
}
#pragma mark - capture delegate
-(void)captureOutput:(AVCaptureOutput *)captureOutput didOutputMetadataObjects:(NSArray *)metadataObjects fromConnection:(AVCaptureConnection *)connection
{
    if (metadataObjects && metadataObjects.count>0)
    {
        //stop the capture
        [_session stopRunning];
        AVMetadataMachineReadableCodeObject * metadataObject = [metadataObjects objectAtIndex : 0 ];
        //do sth to handle the capture result
        [self performSelectorOnMainThread:@selector(handleResult:) withObject:metadataObject waitUntilDone:NO];
    }
}

- (void)handleResult:(AVMetadataMachineReadableCodeObject *)metadataObject
{
    
    NSLog(@"%@", metadataObject.type);
    if([metadataObject.type isEqualToString:AVMetadataObjectTypeQRCode])
        NSLog(@"QR code");
    else
        NSLog(@"other code");
    
    NSString *captureStr = metadataObject.stringValue;
    NSLog(@"%@",captureStr);
    self.textField.text = captureStr;
    [self.previewLayer removeFromSuperlayer];
}

相关文章

  • iOS开发:二维码扫描与生成(扫描篇)

    iOS开发中经常要用到生成二维码与扫描二维码的功能,iOS7开始,系统支持原生的扫描二维码,iOS7 扫描二维码可...

  • iOS 二维码扫描

    iOS开发中 二维码扫描 前言 在移动开发中二维码扫描这种事情越来越常见了,在iOS中我选择了用ZBar这个第三方...

  • iOS开发之二维码扫描

    iOS开发之二维码扫描 在 iOS7 以前,在IOS中实现二维码和条形码扫描,我们所知的有,两大开源组件 ZBar...

  • IOS二维码(ZXingObjc)

    IOS二维码(ZXingObjc) 前言 公司最近上线一款产品,是通过二维码扫描登录。开发阶段的时候使用的是IOS...

  • iOS APP原生一维码、二维码扫描使用介绍

    在app开发中,经常会遇到二维码扫描的功能。 今天我给大家介绍一下,iOS原生一维码、二维码扫描使用。简单实用 话...

  • iOS APP原生二维码使用介绍

    在app开发中,经常会遇到二维码扫描的功能。 今天我给大家介绍一下,iOS原生一维码、二维码扫描使用。简单实用 话...

  • ZBar

    iOS中使用ZBar扫描二维码自定义扫描界面

  • 二维码的生成与扫描

    在简书上看到内容就跟着做了一遍。做个记录。首先是二维码的扫描。iOS开发-二维码扫描这里需要用到的是AVFound...

  • 使用AVFoundation框架实现扫描二维码

    iOS 7之前,开发者开发扫描二维码功能时,一般会借助第三方库,常用的如ZBarSDK等。iOS 7之后,苹果官方...

  • IOS中生成二维码、扫描二维码

    title : IOS中生成二维码、扫描二维码category : UI IOS中生成二维码、保存二维码 标签(空...

网友评论

      本文标题:iOS开发扫描二维码

      本文链接:https://www.haomeiwen.com/subject/pgntmxtx.html