iOS QRCode 二維碼的學習

QRCode 二維碼的學習:

須要倒入一個框架   AVFoundationweb

 

1.須要有輸入設備, 數組

2.輸出設備 (解析輸入設備的內容)瀏覽器

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

 AVCaptureSession  框架

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

 

二 : 而後建立學習

 

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

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

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

 

四:設置掃描類型

 

五:開始掃描

[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];

 

}

 

- (void)didReceiveMemoryWarning {

    [super didReceiveMemoryWarning];

 

}

 

 

-(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];

}

 

 

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

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

 

//}

 

 

-(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

 

 

 

 

  1. 八:二維碼的優化

  2. 導入一個封裝的類  

  3. 重置類型   

  4. 二維碼的掃描 

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

 

 

  1. 總結:

  2. 1.輸入設備

  3. 2.輸出

  4. 3.會話

  5. 4.代理

  6. 5.掃描類型

  7. 6.展現掃描到的內容

  8. 7.開始掃描

  9. 8.代理方法中進行解析

  10. 1.中止掃描

  11. 2.刪除layer

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

相關文章
相關標籤/搜索