QRCode-二維碼識別與生成

發表於2016-10-17

前言

有關二維碼的介紹,我這裡不做過多說明, 可以直接去基維百科檢視,附上鍊接QR code.
IOS7之前,開發者進行掃碼程式設計時,一般會藉助第三方庫。常用的是ZBarSDKaZXingObjC,IOS7之後,系統的AVMetadataObject類中,為我們提供瞭解析二維碼的介面。經過測試,使用原生API掃描和處理的效率非常高,遠遠高於第三方庫。

掃描

官方提供的介面非常簡單,直接看程式碼,主要使用的是AVFoundation。

一些初始化的程式碼加上實現代理方法便完成了二維碼掃描的工作,這裡我們需要注意的是, 在二維碼掃描的時候, 我們一般都會在螢幕中間放一個方框,用來顯示二維碼掃描的大小區間,這裡我們在個AVCaptureMetadataOutput類中有一個rectOfInterest屬性,它的作用就是設定掃描範圍。

這個CGRect引數和普通的Rect範圍不太一樣,它的四個值的範圍都是0-1,表示比例。
rectOfInterest都是按照橫屏來計算的 所以當豎屏的情況下 x軸和y軸要交換一下。
寬度和高度設定的情況也是類似。

我們在上面設定有效掃描區域的方法如下

讀取

讀取主要用到CoreImage 不過要強調的是讀取二維碼的功能只有在iOS8之後才支援,我們需要在相簿中呼叫一個二維碼,將其讀取,程式碼如下

完成相簿代理, 我們在代理中新增讀取二維碼方法

因為沒用真機,所以這裡沒有給出太多的截圖, 用模擬器讀取自帶圖片,結果如下

qrcode1

生成

生成二維碼,其實也是用到CoreImage,但是步驟繁瑣一些,程式碼如下

在textField輸入,生成下圖

qrcode3

長按二維碼識別

這個功能有很多的地方在用, 最讓人熟知的我想便是微信了,其實實現方法還是很簡單的。

我們用剛才生成的二維碼進行長按識別,效果如下

qrcode2

結語

本文demo下載地址請點這裡Demo,

轉自mokey1422所寫的仿支付寶二維碼。

系統原生的二維碼掃描掃描識別速度,要比第三方好用得多,在沒有特殊原因的情況下,比如7.0系統以下,我希望大家都能用系統原生的方法。

文章若有問題請給予指正,感謝。

相關文章