Swift 實現二維碼/條碼讀取 🔍
近年來,二維碼/條碼讀取在各種應用上越來越普及,例如商品掃描、身份證讀取等等,而 Swift 是一個被廣泛使用的程式語言,本文將介紹如何使用 Swift 實現二維碼/條碼讀取。
使用 AVFoundation 實現二維碼/條碼讀取
AVFoundation 是 Apple 提供的一個框架,可以用來處理影像和音訊,也可以用來讀取二維碼/條碼。
首先,我們需要在 info.plist 中加入 Privacy – Camera Usage Description,以便讓使用者知道我們的 App 將會使用相機:
接著,我們可以使用以下程式碼來建立一個 AVCaptureSession:
let captureSession = AVCaptureSession()
接著,我們需要建立一個 AVCaptureDevice,以便取得相機的資訊:
let videoCaptureDevice = AVCaptureDevice.default(for: .video)
接著,我們需要建立一個 AVCaptureDeviceInput,以便將相機的資訊輸入到 AVCaptureSession 中:
let videoInput: AVCaptureDeviceInput
do {
videoInput = try AVCaptureDeviceInput(device: videoCaptureDevice!)
} catch {
return
}
if (captureSession.canAddInput(videoInput)) {
captureSession.addInput(videoInput)
} else {
failed()
return
}
接著,我們需要建立一個 AVCaptureMetadataOutput,以便將讀取到的二維碼/條碼資訊輸出:
let metadataOutput = AVCaptureMetadataOutput()
if (captureSession.canAddOutput(metadataOutput)) {
captureSession.addOutput(metadataOutput)
metadataOutput.setMetadataObjectsDelegate(self, queue: DispatchQueue.main)
metadataOutput.metadataObjectTypes = [.qr, .ean13, .ean8, .code128]
} else {
failed()
return
}
最後,我們可以使用以下程式碼來啟動 AVCaptureSession:
captureSession.startRunning()
當 AVCaptureMetadataOutput 讀取到二維碼/條碼時,就會觸發 didOutput 方法,我們可以在這個方法中取得讀取到的資訊:
func metadataOutput(_ output: AVCaptureMetadataOutput, didOutput metadataObjects: [AVMetadataObject], from connection: AVCaptureConnection) {
captureSession.stopRunning()
if let metadataObject = metadataObjects.first {
guard let readableObject = metadataObject as? AVMetadataMachineReadableCodeObject else { return }
guard let stringValue = readableObject.stringValue else { return }
AudioServicesPlaySystemSound(SystemSoundID(kSystemSoundID_Vibrate))
found(code: stringValue)
}
dismiss(animated: true)
}
以上就是使用 Swift 實現二維碼/條碼讀取的簡單範例,如果你想要更詳細的程式碼,可以參考 AppCoda 的 QRCodeReader 範例。
總結
本文介紹了如何使用 Swift 實現二維碼/條碼讀取,並提供了一個簡單的範例,如果你想要更詳細的程式碼,可以參考 AppCoda 的 QRCodeReader 範例。
推薦閱讀文章
Barcode Scanning in iOS Tutorial: Getting Started
How to Build a Barcode and QR Code Reader in Swift
How to scan a barcode
How to Build a QR Code Reader App in Swift
How to Scan QR Codes with AVFoundation and Swift</a