【iOS】バーコードリーダーをSwiftで作ってみた当記事を参考にiosでバーコードリーダーを作成したいと考えています。
しかし、記事のコードは少し古い良いで、だいぶ書き換えが必要だったので調べながら以下のように修正をおこないました。
Swift
1inal class ViewController: UIViewController { 2 3 //セッションのインスタンス 4 let captureSession = AVCaptureSession() 5 //デフォルトだと背面のカメラが使用される 6 let videoDevice = AVCaptureDevice.default(for: .video) 7 8 private lazy var previewLayer: AVCaptureVideoPreviewLayer = { 9 return AVCaptureVideoPreviewLayer(session: self.captureSession) 10 }() 11 lazy var videoInput = { 12 return try! AVCaptureDeviceInput.init(device: videoDevice!) 13 }() 14 lazy var fileOutput: AVCaptureMetadataOutput = { 15 let output = AVCaptureMetadataOutput() 16 output.setMetadataObjectsDelegate(self, queue: DispatchQueue.main) 17 return output 18 }() 19 20 21 override func viewDidLoad() { 22 super.viewDidLoad() 23 24 fileOutput.metadataObjectTypes = fileOutput.availableMetadataObjectTypes 25 //入出力の接続 26 captureSession.addInput(videoInput) 27 captureSession.addOutput(fileOutput) 28 } 29 30 override func viewDidLayoutSubviews() { 31 super.viewDidLayoutSubviews() 32 //layerに追加するとカメラの画像がViewに表示される 33 previewLayer.frame = self.view.bounds 34 previewLayer.videoGravity = .resizeAspectFill 35 self.view.layer.addSublayer(previewLayer) 36 37 //処理が重いので非同期で実行 38 DispatchQueue.global(qos: .userInitiated).async { 39 self.captureSession.startRunning() 40 } 41 } 42 43} 44 45extension ViewController: AVCaptureMetadataOutputObjectsDelegate { 46 func metadataOutput(_ output: AVCaptureMetadataOutput, didOutput metadataObjects: [AVMetadataObject], from connection: AVCaptureConnection) { 47 //ここが呼ばれない 48 print(metadataObjects) 49 } 50 51} 52
バーコードを変換する処理は難しそうなので後に回すことにして、カメラをバーコードに向けた際にAVCaptureMetadataOutputObjectsDelegateのmetadataOutputメソッド が呼ばれるようにしたいのですが呼ばれずに困っています。
現状実機で動かすと、カメラからの画像が前面に出ている状態なので、カメラ自体は使用できていると思います。
info.plistにもカメラ使用のために必要なKeyを登録しています。
私のコードで何か足りないものがあるのでしょうか?
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。