前提・実現したいこと
下記のサイトを参考に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/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
あなたの回答
tips
プレビュー