回答編集履歴

2

修正

2016/07/22 03:15

投稿

_Kentarou
_Kentarou

スコア8490

test CHANGED
@@ -17,3 +17,169 @@
17
17
  }
18
18
 
19
19
  ```
20
+
21
+
22
+
23
+ 確認したコード
24
+
25
+
26
+
27
+ ```swift
28
+
29
+ import UIKit
30
+
31
+ import AVFoundation
32
+
33
+
34
+
35
+ class ViewController: UIViewController, AVCaptureMetadataOutputObjectsDelegate {
36
+
37
+
38
+
39
+ let session: AVCaptureSession = AVCaptureSession()
40
+
41
+ var prevlayer: AVCaptureVideoPreviewLayer!
42
+
43
+ var hview: UIView = UIView()
44
+
45
+
46
+
47
+ override func viewDidLoad() {
48
+
49
+ super.viewDidLoad()
50
+
51
+
52
+
53
+ //準備(サイズ調整、ボーダーカラー、カメラオブジェクト取得、エラー処理)
54
+
55
+ self.hview.layer.borderColor = UIColor.greenColor().CGColor
56
+
57
+ self.hview.layer.borderWidth = 3
58
+
59
+ self.view.addSubview(self.hview)
60
+
61
+ let device = AVCaptureDevice.defaultDeviceWithMediaType(AVMediaTypeVideo)
62
+
63
+
64
+
65
+
66
+
67
+ //インプット
68
+
69
+ do {
70
+
71
+ let input = try AVCaptureDeviceInput(device: device)
72
+
73
+ session.addInput(input)
74
+
75
+ } catch let error as NSError {
76
+
77
+ print(error)
78
+
79
+ }
80
+
81
+
82
+
83
+ //アウトプット
84
+
85
+ let output = AVCaptureMetadataOutput()
86
+
87
+ output.setMetadataObjectsDelegate(self, queue: dispatch_get_main_queue())
88
+
89
+ session.addOutput(output)//プレビューアウトプットセット
90
+
91
+ output.metadataObjectTypes = output.availableMetadataObjectTypes
92
+
93
+ prevlayer = AVCaptureVideoPreviewLayer(session: session) as AVCaptureVideoPreviewLayer
94
+
95
+ prevlayer.frame = self.view.bounds
96
+
97
+ prevlayer.videoGravity = AVLayerVideoGravityResizeAspectFill
98
+
99
+ self.view.layer.addSublayer(prevlayer)
100
+
101
+
102
+
103
+ session.startRunning()//開始!
104
+
105
+
106
+
107
+ }
108
+
109
+
110
+
111
+ //バーコードが見つかった時に呼ばれる
112
+
113
+ func captureOutput(captureOutput: AVCaptureOutput!, didOutputMetadataObjects metadataObjects: [AnyObject]!, fromConnection connection: AVCaptureConnection!) {
114
+
115
+
116
+
117
+ var highlightViewRect = CGRectZero
118
+
119
+ var barCodeObject : AVMetadataObject!
120
+
121
+ var detectionString : String!
122
+
123
+
124
+
125
+ //対応バーコードタイプ
126
+
127
+ let barCodeTypes = [AVMetadataObjectTypeUPCECode,
128
+
129
+ AVMetadataObjectTypeCode39Code,
130
+
131
+ AVMetadataObjectTypeCode39Mod43Code,
132
+
133
+ AVMetadataObjectTypeEAN13Code,
134
+
135
+ AVMetadataObjectTypeEAN8Code,
136
+
137
+ AVMetadataObjectTypeCode93Code,
138
+
139
+ AVMetadataObjectTypeCode128Code,
140
+
141
+ AVMetadataObjectTypePDF417Code,
142
+
143
+ AVMetadataObjectTypeQRCode,
144
+
145
+ AVMetadataObjectTypeAztecCode
146
+
147
+ ]
148
+
149
+
150
+
151
+ //複数のバーコードの同時取得も可能
152
+
153
+ for metadata in metadataObjects {
154
+
155
+ for barcodeType in barCodeTypes {
156
+
157
+ if metadata.type == barcodeType {
158
+
159
+ barCodeObject = self.prevlayer.transformedMetadataObjectForMetadataObject(metadata as! AVMetadataMachineReadableCodeObject)
160
+
161
+ highlightViewRect = barCodeObject.bounds
162
+
163
+ detectionString = (metadata as! AVMetadataMachineReadableCodeObject).stringValue
164
+
165
+ self.session.stopRunning()
166
+
167
+ break
168
+
169
+ }
170
+
171
+ }
172
+
173
+ }
174
+
175
+ print(detectionString)
176
+
177
+ self.prevlayer.frame = highlightViewRect
178
+
179
+ self.view.bringSubviewToFront(self.hview)
180
+
181
+ }
182
+
183
+ }
184
+
185
+ ```

1

修正

2016/07/22 03:15

投稿

_Kentarou
_Kentarou

スコア8490

test CHANGED
@@ -8,6 +8,8 @@
8
8
 
9
9
  let input = try AVCaptureDeviceInput(device: device)
10
10
 
11
+ session.addInput(input)
12
+
11
13
  } catch let error as NSError {
12
14
 
13
15
  print(error)