この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
はじめに
こんにちは。モバイルアプリサービス部の平屋です。
本記事では、ZXingObjCを使ってQRコードを読み取る実装を紹介します。
検証環境
- macOS High Sierra 10.13.5
- Xcode Version 9.4.1
- iPhone X, iOS 11.4
- ZXingObjC 3.2.2
導入
CocoaPodsやCarthageなどを使用して導入できます。
// Podfileの作成例
target 'QRReader' do
pod 'ZXingObjC', '~> 3.2.2'
end
実装
Info.plistにカメラの使用目的を追加する
Info.plistにNSCameraUsageDescription
と値(カメラの使用目的)を追加します。
<key>NSCameraUsageDescription</key>
<string>QRコードを読み取るために使います</string>
QRコード読み取り用のレイヤーを追加する
バーコード読み取り用のクラスZXCapture
のレイヤーをviewのレイヤーに追加します。
import UIKit
import ZXingObjC
import SafariServices
class ScanViewController: UIViewController {
private let capture = ZXCapture()
// ...
override func viewDidLoad() {
super.viewDidLoad()
capture.delegate = self
capture.camera = capture.back()
capture.layer.frame = view.bounds
view.layer.addSublayer(capture.layer)
capture.start()
}
// ...
}
QRコード検出時の処理を実装する
ZXCaptureDelegate
のcaptureResult(_:result:)
内に取得結果を使用する処理を追加します。
extension ScanViewController: ZXCaptureDelegate {
func captureResult(_ capture: ZXCapture!, result: ZXResult!) {
// ...
capture.stop()
guard let urlString = result.text, let url = URL(string: urlString) else { return }
// 取得結果を使用する処理
present(SFSafariViewController(url: url), animated: true)
}
}
動作確認
以下のQRコードを読み取ってみます。内容は文字列「http://classmethod.jp」です。
ボタンをタップして、読み取り画面を表示します。
読み取り画面が表示されます。
QRコードを認識すると、SFSafariViewControllerが開き、webページが表示されます。
さいごに
本記事では、ZXingObjCを使ってQRコードを読み取る実装を紹介しました。
今回解説したサンプルアプリケーションは以下のリポジトリで公開していますので参考にしてみてください!