以下を参考に作成しましたが、swift3だとエラーだらけで、
使えません。swift3で使用数には、どうすればいいか教えてください。
http://swift-salaryman.com/avmetadataobject.php
import UIKit
import AVFoundation
class ViewController: UIViewController, AVCaptureMetadataOutputObjectsDelegate {
let session: AVCaptureSession = AVCaptureSession() var prevlayer: AVCaptureVideoPreviewLayer! var hview: UIView = UIView() override func viewDidLoad() { super.viewDidLoad() //準備(サイズ調整、ボーダーカラー、カメラオブジェクト取得、エラー処理) self.hview.autoresizingMask = UIViewAutoresizing.FlexibleTopMargin | UIViewAutoresizing.FlexibleBottomMargin | UIViewAutoresizing.FlexibleLeftMargin | UIViewAutoresizing.flexibleRightMargin self.hview.layer.borderColor = UIColor.green.cgColor self.hview.layer.borderWidth = 3 self.view.addSubview(self.hview) let device = AVCaptureDevice.defaultDevice(withMediaType: AVMediaTypeVideo) var error : NSError? = nil //インプット let input : AVCaptureDeviceInput? = AVCaptureDeviceInput.deviceInputWithDevice(device, error: &error) as? AVCaptureDeviceInput if input != nil { session.addInput(input)//カメラインプットセット }else { print(error) } //アウトプット let output = AVCaptureMetadataOutput() output.setMetadataObjectsDelegate(self, queue: DispatchQueue.maindispatch_get_main_queue()) session.addOutput(output)//プレビューアウトプットセット output.metadataObjectTypes = output.availableMetadataObjectTypes prevlayer = AVCaptureVideoPreviewLayer.withSession(session) as AVCaptureVideoPreviewLayer prevlayer.frame = self.view.bounds prevlayer.videoGravity = AVLayerVideoGravityResizeAspectFill self.view.layer.addSublayer(prevlayer) session.startRunning()//開始! } //バーコードが見つかった時に呼ばれる func captureOutput(captureOutput: AVCaptureOutput!, didOutputMetadataObjects metadataObjects: [AnyObject]!, fromConnection connection: AVCaptureConnection!) { var highlightViewRect = CGRectZero var barCodeObject : AVMetadataObject! var detectionString : String! //対応バーコードタイプ let barCodeTypes = [AVMetadataObjectTypeUPCECode, AVMetadataObjectTypeCode39Code, AVMetadataObjectTypeCode39Mod43Code, AVMetadataObjectTypeEAN13Code, AVMetadataObjectTypeEAN8Code, AVMetadataObjectTypeCode93Code, AVMetadataObjectTypeCode128Code, AVMetadataObjectTypePDF417Code, AVMetadataObjectTypeQRCode, AVMetadataObjectTypeAztecCode ] //複数のバーコードの同時取得も可能 for metadata in metadataObjects { for barcodeType in barCodeTypes { if metadata.type == barcodeType { barCodeObject = self.prevlayer.transformedMetadataObject(for: metadata as! AVMetadataMachineReadableCodeObject) highlightViewRect = barCodeObject.bounds detectionString = (metadata as! AVMetadataMachineReadableCodeObject).stringValue self.session.stopRunning() break } } } println(detectionString) self.prevlayer.frame = highlightViewRect self.view.bringSubviewToFront(toFront: self.hview) }
}
コードブロック使ってください

回答1件
あなたの回答
tips
プレビュー