以下のように変更して試してみてください。
swift
1do {
2 let input = try AVCaptureDeviceInput(device: device)
3 session.addInput(input)
4} catch let error as NSError {
5 print(error)
6}
確認したコード
swift
1import UIKit
2import AVFoundation
3
4class ViewController: UIViewController, AVCaptureMetadataOutputObjectsDelegate {
5
6 let session: AVCaptureSession = AVCaptureSession()
7 var prevlayer: AVCaptureVideoPreviewLayer!
8 var hview: UIView = UIView()
9
10 override func viewDidLoad() {
11 super.viewDidLoad()
12
13 //準備(サイズ調整、ボーダーカラー、カメラオブジェクト取得、エラー処理)
14 self.hview.layer.borderColor = UIColor.greenColor().CGColor
15 self.hview.layer.borderWidth = 3
16 self.view.addSubview(self.hview)
17 let device = AVCaptureDevice.defaultDeviceWithMediaType(AVMediaTypeVideo)
18
19
20 //インプット
21 do {
22 let input = try AVCaptureDeviceInput(device: device)
23 session.addInput(input)
24 } catch let error as NSError {
25 print(error)
26 }
27
28 //アウトプット
29 let output = AVCaptureMetadataOutput()
30 output.setMetadataObjectsDelegate(self, queue: dispatch_get_main_queue())
31 session.addOutput(output)//プレビューアウトプットセット
32 output.metadataObjectTypes = output.availableMetadataObjectTypes
33 prevlayer = AVCaptureVideoPreviewLayer(session: session) as AVCaptureVideoPreviewLayer
34 prevlayer.frame = self.view.bounds
35 prevlayer.videoGravity = AVLayerVideoGravityResizeAspectFill
36 self.view.layer.addSublayer(prevlayer)
37
38 session.startRunning()//開始!
39
40 }
41
42 //バーコードが見つかった時に呼ばれる
43 func captureOutput(captureOutput: AVCaptureOutput!, didOutputMetadataObjects metadataObjects: [AnyObject]!, fromConnection connection: AVCaptureConnection!) {
44
45 var highlightViewRect = CGRectZero
46 var barCodeObject : AVMetadataObject!
47 var detectionString : String!
48
49 //対応バーコードタイプ
50 let barCodeTypes = [AVMetadataObjectTypeUPCECode,
51 AVMetadataObjectTypeCode39Code,
52 AVMetadataObjectTypeCode39Mod43Code,
53 AVMetadataObjectTypeEAN13Code,
54 AVMetadataObjectTypeEAN8Code,
55 AVMetadataObjectTypeCode93Code,
56 AVMetadataObjectTypeCode128Code,
57 AVMetadataObjectTypePDF417Code,
58 AVMetadataObjectTypeQRCode,
59 AVMetadataObjectTypeAztecCode
60 ]
61
62 //複数のバーコードの同時取得も可能
63 for metadata in metadataObjects {
64 for barcodeType in barCodeTypes {
65 if metadata.type == barcodeType {
66 barCodeObject = self.prevlayer.transformedMetadataObjectForMetadataObject(metadata as! AVMetadataMachineReadableCodeObject)
67 highlightViewRect = barCodeObject.bounds
68 detectionString = (metadata as! AVMetadataMachineReadableCodeObject).stringValue
69 self.session.stopRunning()
70 break
71 }
72 }
73 }
74 print(detectionString)
75 self.prevlayer.frame = highlightViewRect
76 self.view.bringSubviewToFront(self.hview)
77 }
78}
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/07/21 21:57
2016/07/22 03:17
2016/07/22 15:07