swiftを勉強し始めた初心者です、よろしくお願いします!
・わからないこと
一般的なQRコードの読み込みと生成(URLのような文字列)はできるようになったのですが、下の画像のQRコードは特別らしく、読み込むことができません。
captureOutputメソッドのmetadataObjectsにnilが入ってしまいます。
QRコード読み込みの勉強中にこの問題に引っかかって、調べまわったのですがそれらしい方法が見つかりませんでした。
下のQRの画像は「チケットバックforプリパラ」というアプリを使用させていただいたものですが、このアプリではその特別なQRコードを読み込んで生成することができているので、方法はあるはずなのですが方法が分かりません。
是非アドバイスをよろしくお願いいたします。
現在のコードを載せておきます。
Swift3
1var captureSession : AVCaptureSession? 2 var videoPreviewLayer : AVCaptureVideoPreviewLayer? 3 var qrCodeFrameView : UIView? 4 override func viewDidLoad() { 5 super.viewDidLoad() 6 7 let captureDevice: AVCaptureDevice = .defaultDevice(withMediaType: AVMediaTypeVideo) 8 9 do { 10 let deviceInput = try AVCaptureDeviceInput(device: captureDevice) 11 12 captureSession = AVCaptureSession() 13 14 captureSession?.addInput(deviceInput) 15 16 let captureMetadataOutput = AVCaptureMetadataOutput() 17 captureSession?.addOutput(captureMetadataOutput) 18 captureMetadataOutput.setMetadataObjectsDelegate(self, queue: DispatchQueue.main) 19 captureMetadataOutput.metadataObjectTypes = [AVMetadataObjectTypeQRCode] 20 videoPreviewLayer = AVCaptureVideoPreviewLayer(session: captureSession ) 21 videoPreviewLayer?.videoGravity = AVLayerVideoGravityResizeAspectFill 22 videoPreviewLayer?.frame = view.layer.bounds 23 24 view.layer.addSublayer(videoPreviewLayer!) 25 qrCodeFrameView = UIView() 26 27 if let qrCodeFrameView = qrCodeFrameView { 28 qrCodeFrameView.layer.borderColor = UIColor.green.cgColor 29 qrCodeFrameView.layer.borderWidth = 2 30 view.addSubview(qrCodeFrameView) 31 view.bringSubview(toFront: qrCodeFrameView) 32 } 33 } catch { 34 print(error) 35 return 36 } 37} 38 39func captureOutput (_ captureOutput: AVCaptureOutput!, didOutputMetadataObjects metadataObjects: [Any]!, from connection: AVCaptureConnection!) { 40 41 42 43 if metadataObjects == nil || metadataObjects.count == 0 { 44 qrCodeFrameView?.frame = .zero 45 print("QRコードが見つかりません") 46 return 47 } 48 49 let metaData = metadataObjects[0] as! AVMetadataMachineReadableCodeObject 50 51 if metaData.type == AVMetadataObjectTypeQRCode { 52 let barCodeObject = videoPreviewLayer?.transformedMetadataObject(for: metaData) 53 qrCodeFrameView?.frame = barCodeObject!.bounds 54 55 if metaData.stringValue != nil { 56 coordinateInput.text = metaData.stringValue 57 print(metaData.stringValue) 58 } 59 } 60 } 61

回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/03/17 05:49