質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.49%
Swift

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

Q&A

0回答

1326閲覧

SWIFTでバーコード読み取り&AmazonURL起動

kensukekimura

総合スコア6

Swift

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

0グッド

0クリップ

投稿2019/12/29 15:37

前提・実現したいこと

下記のサイトを参考にiPhoneで読み込んだバーコードから
AmazonのURLへ遷移するアプリケーションを作成したいです。
https://qiita.com/ryokosuge/items/c903e04da555294299ae

そのまま使用するとバージョンのせいか多数のエラーが発生したため
下記のように書き換えました。
エラーは出なくなったのですが、バーコードの読み込みが行われません。

バーコードを読み込むイベントがないためなのでしょうか?
根本的なことで申し訳ございませんがご教示ください。

環境
Xcode11.3

該当のソースコード

(ViewContoroller.swift)

SWIFT

1 2import UIKit 3import AVFoundation 4 5class ViewController: UIViewController { 6 @IBOutlet weak var resultTextLabel: UILabel! 7 @IBOutlet weak var captureView: UIView! 8 9 public lazy var captureSession: AVCaptureSession = AVCaptureSession() 10 public lazy var captureDevice: AVCaptureDevice = AVCaptureDevice.default(for: AVMediaType.video)! 11 12 public lazy var capturePreviewLayer: AVCaptureVideoPreviewLayer = { 13 let layer = AVCaptureVideoPreviewLayer(session: self.captureSession) 14 return layer 15 }() 16 17 18 public lazy var captureInput: AVCaptureInput? = nil 19 public lazy var captureOutput: AVCaptureMetadataOutput = { 20 let output = AVCaptureMetadataOutput() 21 output.setMetadataObjectsDelegate(self, queue: DispatchQueue.main) 22 23 return output 24 }() 25 26 override func viewDidLoad() { 27super.viewDidLoad() 28 setupBarcodeCapture() 29 /* 30self.view.backgroundColor = .white 31// バーコードリーダーのモーダルが開くボタン 32 let buttonSize: CGFloat = 100 33let button: UIButton = UIButton() 34 button.frame = CGRect(x: (self.view.frame.width - buttonSize) / 2, y: (self.view.frame.height - buttonSize) / 2, width: buttonSize, height: buttonSize) 35 button.backgroundColor = .red 36 button.setTitle("開く", for: UIControl.State.normal) 37 button.addTarget(self, action: #selector(taped(sender:)), for: .touchUpInside) 38self.view.addSubview(button) 39 */ 40 } 41// ボタンが押されたら呼ばれます 42 @objc func taped(sender: UIButton) { 43self.present(BarCodeReaderVC(), animated: true, completion: nil) 44 } 45 46 private func setupBarcodeCapture() { 47 do { 48 captureInput = try AVCaptureDeviceInput(device: captureDevice) 49 captureSession.addInput(captureInput!) 50 captureSession.addOutput(captureOutput) 51 captureOutput.metadataObjectTypes = captureOutput.availableMetadataObjectTypes 52 capturePreviewLayer.frame = self.captureView?.bounds ?? CGRect.zero 53 capturePreviewLayer.videoGravity = AVLayerVideoGravity.resizeAspectFill 54 captureView?.layer.addSublayer(capturePreviewLayer) 55 captureSession.startRunning() 56 } catch let error as NSError { 57 print(error) 58 } 59 } 60} 61

(BarCodeReaderVC.swift)

SWIFT

1 2import UIKit 3import AVFoundation 4 5class ViewController: UIViewController { 6 @IBOutlet weak var resultTextLabel: UILabel! 7 @IBOutlet weak var captureView: UIView! 8 9 public lazy var captureSession: AVCaptureSession = AVCaptureSession() 10 public lazy var captureDevice: AVCaptureDevice = AVCaptureDevice.default(for: AVMediaType.video)! 11 12 public lazy var capturePreviewLayer: AVCaptureVideoPreviewLayer = { 13 let layer = AVCaptureVideoPreviewLayer(session: self.captureSession) 14 return layer 15 }() 16 17 18 public lazy var captureInput: AVCaptureInput? = nil 19 public lazy var captureOutput: AVCaptureMetadataOutput = { 20 let output = AVCaptureMetadataOutput() 21 output.setMetadataObjectsDelegate(self, queue: DispatchQueue.main) 22 23 return output 24 }() 25 26 override func viewDidLoad() { 27super.viewDidLoad() 28 setupBarcodeCapture() 29 /* 30self.view.backgroundColor = .white 31// バーコードリーダーのモーダルが開くボタン 32 let buttonSize: CGFloat = 100 33let button: UIButton = UIButton() 34 button.frame = CGRect(x: (self.view.frame.width - buttonSize) / 2, y: (self.view.frame.height - buttonSize) / 2, width: buttonSize, height: buttonSize) 35 button.backgroundColor = .red 36 button.setTitle("開く", for: UIControl.State.normal) 37 button.addTarget(self, action: #selector(taped(sender:)), for: .touchUpInside) 38self.view.addSubview(button) 39 */ 40 } 41// ボタンが押されたら呼ばれます 42 @objc func taped(sender: UIButton) { 43self.present(BarCodeReaderVC(), animated: true, completion: nil) 44 } 45 46 private func setupBarcodeCapture() { 47 do { 48 captureInput = try AVCaptureDeviceInput(device: captureDevice) 49 captureSession.addInput(captureInput!) 50 captureSession.addOutput(captureOutput) 51 captureOutput.metadataObjectTypes = captureOutput.availableMetadataObjectTypes 52 capturePreviewLayer.frame = self.captureView?.bounds ?? CGRect.zero 53 capturePreviewLayer.videoGravity = AVLayerVideoGravity.resizeAspectFill 54 captureView?.layer.addSublayer(capturePreviewLayer) 55 captureSession.startRunning() 56 } catch let error as NSError { 57 print(error) 58 } 59 } 60} 61

試したこと

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

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

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

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問