ios7下二維碼功能的實現

來源:互聯網
上載者:User

蘋果公司升級到IOS7後自己的PassBook內建二維碼掃描功能,所以現在使用二維碼功能不需要在藉助第三方庫了

使用前請先匯入AVFoundation.frameWork

//  YHQViewController.m

//  ReadQRCode

//

//  Created by apple on 13-12-22.

//  Copyright (c) 2013年 apple. All rights reserved.

//

 

#import "YHQViewController.h"

#import <AVFoundation/AVFoundation.h>

 

@interfaceYHQViewController ()<AVCaptureMetadataOutputObjectsDelegate>

 

// IBOutletUILabel *captureLabe是自己建立的storyBoard中的Label用於顯示擷取到的二維碼的資訊的連線

 

@end

 

@implementation YHQViewController

 

- (void)viewDidLoad

{

    [superviewDidLoad];

#pragma mark - 讀取二維碼

- (void)readQRcode

{

    // 1. 網路攝影機裝置

    AVCaptureDevice *device = [AVCaptureDevicedefaultDeviceWithMediaType:AVMediaTypeVideo];

    

    // 2. 設定輸入

    // 因為模擬器是沒有網路攝影機的,因此在此最好做一個判斷

    NSError *error = nil;

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

   

        NSLog(@"沒有網路攝影機-%@", error.localizedDescription);

    }

    

    // 3. 設定輸出(Metadata中繼資料)

    AVCaptureMetadataOutput *output = [[AVCaptureMetadataOutputalloc] init];

    // 3.1 設定輸出的代理

    // 說明:使用主線程隊列,相應比較同步,使用其他隊列,相應不同步,容易讓使用者產生不好的體驗

    [output setMetadataObjectsDelegate:selfqueue:dispatch_get_main_queue()];

    //    [output setMetadataObjectsDelegate:self queue:dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)];

    

    // 4. 拍攝會話

    AVCaptureSession *session = [[AVCaptureSessionalloc] init];

    // 添加session的輸入和輸出

    [session addInput:input];

    [session addOutput:output];

    // 4.1 設定輸出的格式

    // 提示:一定要先設定會話的輸出為output之後,再指定輸出的中繼資料類型!

    [output setMetadataObjectTypes:@[AVMetadataObjectTypeQRCode]];

    

    // 5. 設定預覽圖層(用來讓使用者能夠看到掃描情況)

    AVCaptureVideoPreviewLayer *preview = [AVCaptureVideoPreviewLayerlayerWithSession:session];

    // 5.1 設定preview圖層的屬性

    [preview setVideoGravity:AVLayerVideoGravityResizeAspectFill];

    // 5.2 設定preview圖層的大小

    [preview setFrame:self.view.bounds];

    // 5.3 將圖層添加到視圖的圖層

    [self.view.layerinsertSublayer:preview atIndex:0];

    self.previewLayer = preview;

    

    // 6. 啟動會話

    [session startRunning];

    

    self.session = session;

}

 

#pragma mark - 輸出代理方法

// 此方法是在識別到QRCode,並且完成轉換

// 如果QRCode的內容越大,轉換需要的時間就越長

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

{

    // 會頻繁的掃描,調用代理方法

    // 1. 如果掃描完成,停止會話

    [self.sessionstopRunning];

    // 2. 刪除預覽圖層

    [self.previewLayerremoveFromSuperlayer];

    

    NSLog(@"%@", metadataObjects);

    // 3. 設定介面顯示掃描結果

    

    if (metadataObjects.count > 0) {

        AVMetadataMachineReadableCodeObject *obj = metadataObjects[0];

        // 提示:如果需要對url或者名片等資訊進行掃描,可以在此進行擴充!

        _captureLabel.text = obj.stringValue;

    }

}

// 在storyBoard中添加的按鈕的連線的點擊事件,一點擊按鈕就提示使用者開啟網路攝影機並掃描

- (IBAction)capture {

    //掃描二維碼

    [selfreadQRcode];

}

 

@end

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.