◾️QRコードリーダーの実装
QRコードを読み取る方法を以下に記載します。
読み取った後の処理は各自必要な処理を記載する必要があります。
import AVFoundation
import UIKit
class CameraViewController: UIViewController, AVCaptureMetadataOutputObjectsDelegate {
// カメラやマイクの入出力を管理するオブジェクトを生成
let session = AVCaptureSession()
override func viewDidLoad() {
super.viewDidLoad()
// カメラやマイクのデバイスオブジェクトを生成
let devices:[AVCaptureDevice] = AVCaptureDevice.DiscoverySession(deviceTypes: [.builtInWideAngleCamera], mediaType: .video, position: .back).devices
// 該当するデバイスのうち最初に取得したもの(背面カメラ)を利用する
if let backCamera = devices.first {
do {
// QRコードの読み取りに背面カメラの映像を利用するための設定
let deviceInput = try AVCaptureDeviceInput(device: backCamera)
if self.session.canAddInput(deviceInput) {
self.session.addInput(deviceInput)
// 背面カメラの映像からQRコードを検出するための設定
let metadataOutput = AVCaptureMetadataOutput()
if self.session.canAddOutput(metadataOutput) {
self.session.addOutput(metadataOutput)
metadataOutput.setMetadataObjectsDelegate(self, queue: DispatchQueue.main)
metadataOutput.metadataObjectTypes = [.qr]
// 背面カメラの映像を画面に表示するためのレイヤーを生成
let previewLayer = AVCaptureVideoPreviewLayer(session: self.session)
previewLayer.frame = self.view.bounds
previewLayer.videoGravity = .resizeAspectFill
self.view.layer.addSublayer(previewLayer)
// 読み取り開始
self.session.startRunning()
}
}
} catch {
print("Error occured while creating video device input: \(error)")
}
}
}
func metadataOutput(_ output: AVCaptureMetadataOutput, didOutput metadataObjects: [AVMetadataObject], from connection: AVCaptureConnection) {
for metadata in metadataObjects as! [AVMetadataMachineReadableCodeObject] {
// QRコードのデータかどうかの確認
if metadata.type != .qr {
continue
}
// QRコードの内容が空かどうかの確認
if metadata.stringValue == nil {
continue
}
// ここでQRコードから取得したデータで何らかの処理を行う
// 取得したデータは「metadata.stringValue」で使用できる
}
}
}
◾️カメラの利用権限
iOS10以降では、「Info.plist」にカメラを使用する権限を明記しなければクラッシュします。
そのため、Info.plistに以下を追加する必要があります。
Key:Privacy - Camera Usage Description
型:String
Value:利用用途