🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

1回答

2314閲覧

バーコードを認識させたいが、デリゲートがうまく呼ばれない

hodoru3sei

総合スコア284

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2019/11/10 13:06

【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を登録しています。

私のコードで何か足りないものがあるのでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

captureSession.addOutput(fileOutput)

してから

fileOutput.metadataObjectTypes = fileOutput.availableMetadataObjectTypes

を実行してみてください。

投稿2019/11/11 07:47

takabosoft

総合スコア8356

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問