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

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

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

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

Q&A

0回答

1289閲覧

janコードを読み取りたいが新しい書き方をおしえてほしい

KTH

総合スコア86

Swift

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

0グッド

0クリップ

投稿2020/07/31 02:20

JANコードを読み取りたいのですが調べてもネット上には古いコードしかなくてエラーがでてしまいま

今風の書き方を教えて下さい

swift

1import UIKit 2import AVFoundation 3 4class ViewController: UIViewController, AVCaptureMetadataOutputObjectsDelegate { 5 6 @IBOutlet weak var previewView: UIView! 7 @IBOutlet weak var label: UILabel! 8 9 let detectionArea = UIView() 10 var timer: Timer! 11 var counter = 0 12 var isDetected = false 13 14 override func viewDidLoad() { 15 super.viewDidLoad() 16 17 // セッションのインスタンス生成 18 let captureSession = AVCaptureSession() 19 20 // 入力(背面カメラ) 21 let videoDevice = AVCaptureDevice.defaultDevice(withMediaType: AVMediaTypeVideo) 22 let videoInput = try! AVCaptureDeviceInput.init(device: videoDevice) 23 captureSession.addInput(videoInput) 24 25 // 出力(ビデオデータ) 26 let metadataOutput = AVCaptureMetadataOutput() 27 captureSession.addOutput(metadataOutput) 28 29 // メタデータを検出した際のデリゲート設定 30 metadataOutput.setMetadataObjectsDelegate(self, queue: DispatchQueue.main) 31 // EAN-13コードの認識を設定 32 metadataOutput.metadataObjectTypes = [AVMetadataObject.ObjectType.ean13,AVMetadataObject.ObjectType.ean8] 33 34 // 検出エリアのビュー 35 let x: CGFloat = 0.05 36 let y: CGFloat = 0.3 37 let width: CGFloat = 0.9 38 let height: CGFloat = 0.2 39 40 detectionArea.frame = CGRect(x: view.frame.size.width * x, y: view.frame.size.height * y, width: view.frame.size.width * width, height: view.frame.size.height * height) 41 detectionArea.layer.borderColor = UIColor.red.cgColor 42 detectionArea.layer.borderWidth = 3 43 view.addSubview(detectionArea) 44 45 // 検出エリアの設定 46 metadataOutput.rectOfInterest = CGRect(x: y,y: 1-x-width,width: height,height: width) 47 48 // プレビュー 49 if let videoLayer:AVCaptureVideoPreviewLayer = AVCaptureVideoPreviewLayer.init(session: captureSession) { 50 videoLayer.frame = previewView.bounds 51 videoLayer.videoGravity = AVLayerVideoGravity.resizeAspectFill 52 previewView.layer.addSublayer(videoLayer) 53 } 54 55 // セッションの開始 56 DispatchQueue.global(qos: .userInitiated).async { 57 captureSession.startRunning() 58 } 59 60 timer = Timer.scheduledTimer(timeInterval: 0.5, target: self, selector: #selector(self.update), userInfo: nil, repeats: true) 61 timer.fire() 62 } 63 64 func captureOutput(_ captureOutput: AVCaptureOutput!, didOutputMetadataObjects metadataObjects: [Any]!, from connection: AVCaptureConnection!) { 65 // 複数のメタデータを検出できる 66 for metadata in metadataObjects as! [AVMetadataMachineReadableCodeObject] { 67 // EAN-13Qコードのデータかどうかの確認 68 if metadata.type == AVMetadataObject.ObjectType.ean13 || metadata.type == AVMetadataObject.ObjectType.ean8{ 69 if metadata.stringValue != nil { 70 // 検出データを取得 71 counter = 0 72 if !isDetected || label.text != metadata.stringValue! { 73 isDetected = true 74 AudioServicesPlaySystemSound(kSystemSoundID_Vibrate) // バイブレーション 75 label.text = metadata.stringValue! 76 detectionArea.layer.borderColor = UIColor.white.cgColor 77 detectionArea.layer.borderWidth = 5 78 } 79 } 80 } 81 } 82 } 83 84 @objc func update(tm: Timer) { 85 counter += 1 86 print(counter) 87 if 1 < counter { 88 detectionArea.layer.borderColor = UIColor.red.cgColor 89 detectionArea.layer.borderWidth = 3 90 label.text = "" 91 } 92 } 93} 94

// 入力(背面カメラ)
let videoDevice = AVCaptureDevice.defaultDevice(withMediaType: AVMediaTypeVideo)

の部分でType 'AVCaptureDevice' has no member 'defaultDevice'というエラーが出ます
どう書けばいいのですか?

あと
// プレビュー
if let videoLayer:AVCaptureVideoPreviewLayer = AVCaptureVideoPreviewLayer.init(session: captureSession) {
videoLayer.frame = previewView.bounds
videoLayer.videoGravity = AVLayerVideoGravity.resizeAspectFill
previewView.layer.addSublayer(videoLayer)
}
の部分でもNon-optional expression of type 'AVCaptureVideoPreviewLayer' used in a check for optionalsというエラーが出ます

ここもどう書けば今の書き方なのか教えていただければ幸いです

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

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

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

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

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

mdj

2020/07/31 04:12

'AVCaptureDevice' has no member 'defaultDevice' でググったら同じエラーでた質問してる人がいますけど調べてますか?
KTH

2020/07/31 04:22

いえ
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問