iOS的二維碼(QRCode)的學習

 

QRCode 二維碼的學習:web

須要倒入一個框架   AVFoundation數組

 

1.須要有輸入設備, 瀏覽器

2.輸出設備 (解析輸入設備的內容)session

3.有一個會話類(輸入輸出完事了須要哪個是輸入那一個是輸出)app

 AVCaptureSession  框架

4。一個展現掃描的內容 layeride

 

二 : 而後建立學習

 

三:設置代理 --獲取數據優化

會話類不知道哪個是時輸入設備 哪個是 輸出設備的 須要銜接她們atom

去綁定輸入和輸出設備 (作一個是否的判斷)、

 

四:設置掃描類型

 

五:開始掃描

[self.session startRunning]

六:完成代理方法去處理二維碼 

掃描到的是一個數據數組

還須要去找到一個類(是一個類型的)  (細節頭文件是沒有提示的) 跳到方法裏去

獲取到了數據 裏面有兩個屬性  obj.stringvalue

 

七:在iOS9裏面又一個特殊服務  能夠不用加載webview  能夠方便展現網頁

細節:(自帶一相似導航欄的東西   完成  刷新 還帶有分享  也就是系統真正的瀏覽器)

好處:網頁過長的時候 在滾動的過程當中是沒有那個tabbar和導航欄的

只有在最上面的時候纔會顯示那個的tabbar和導航欄

 

若是你的SFSafariViewController   

 

 

//

//  GASScanViewController.m

//  GasManger

//

//  Created by Ninesday on 16/6/1.

//  Copyright © 2016年 Ninesday. All rights reserved.

//

 

#import "GASScanViewController.h"

#import <AVFoundation/AVFoundation.h>

#import <SafariServices/SafariServices.h>

@interface GASScanViewController ()<AVCaptureMetadataOutputObjectsDelegate>

//1.輸入設備

@property (nonatomic,strong)AVCaptureDeviceInput *input;

//2.輸出設備

@property (nonatomic,strong)AVCaptureMetadataOutput *output;

//3.會話類

@property (nonatomic,strong) AVCaptureSession *session;

//4.掃描到內容的layer

@property (nonatomic,strong) AVCaptureVideoPreviewLayer *previewlayer;

 

@end

 

 

@implementation GASScanViewController

 

- (void)viewDidLoad {

    [super viewDidLoad];

    // Do any additional setup after loading the view.

}

 

- (void)didReceiveMemoryWarning {

    [super didReceiveMemoryWarning];

    // Dispose of any resources that can be recreated.

}

 

 

-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {

    //輸入設備

    //得先建立設備

    AVCaptureDevice * device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];

    self.input = [[AVCaptureDeviceInput alloc]initWithDevice:device error:nil];

    

    //輸出設備

    self.output = [AVCaptureMetadataOutput new];

    

    //會話類

    self.session = [AVCaptureSession new];

    //綁定設備

    if ([self.session canAddInput:self.input]) {

        [self.session addInput:self.input];

    }

    if ([self.session canAddOutput:self.output]) {

        [self.session addOutput:self.output];

    }

    //設置代理獲取數據

    [self.output setMetadataObjectsDelegate:self queue:dispatch_get_main_queue()];

    //設置掃描的類型

    [self.output setMetadataObjectTypes:@[AVMetadataObjectTypeQRCode]];

    

    //掃描到內容layer--須要設置會話

    

    

    self.previewlayer = [[AVCaptureVideoPreviewLayer alloc]initWithSession:self.session];

    self.previewlayer.frame = self.view.bounds;

    [self.view.layer addSublayer:self.previewlayer];

    

    //開始掃描

    [self.session startRunning];

}

 

/*

#pragma mark - Navigation

 

// In a storyboard-based application, you will often want to do a little preparation before navigation

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {

    // Get the new view controller using [segue destinationViewController].

    // Pass the selected object to the new view controller.

}

*/

 

-(void)captureOutput:(AVCaptureOutput *)captureOutput didOutputMetadataObjects:(NSArray *)metadataObjects fromConnection:(AVCaptureConnection *)connection {

    if (metadataObjects.count >0) {

        //1.中止掃描

        [self.session stopRunning];

        //刪除layer

        [self.previewlayer removeFromSuperlayer];

        //獲取數據 AVMetadataMachineReadableCodeObject 頭文件沒提示

        AVMetadataMachineReadableCodeObject *obj =  metadataObjects[0];

        NSLog(@"%@", obj.stringValue);

        

        if ([obj.stringValue hasPrefix:@"http"]) {

            //iOS9新增長的

            SFSafariViewController *sf = [[SFSafariViewController alloc]initWithURL:[NSURL URLWithString:obj.stringValue]];

            [self presentViewController:sf animated:sf completion:nil];

        }

    }

}

 

 

@end

 

 

 

 

八:二維碼的優化

導入一個封裝的類  

重置類型   

二維碼的掃描 

iOS7 平臺以後纔有             流行的框架    ZBar ZXing

 

 

總結:

1.輸入設備

2.輸出

3.會話

4.代理

5.掃描類型

6.展現掃描到的內容

7.開始掃描

8.代理方法中進行解析

1.中止掃描

2.刪除layer

3.獲取數據   AVMetadataMachReadableCodeObject  頭文件沒提示

相關文章
相關標籤/搜索