Skip to content

Instantly share code, notes, and snippets.

class ReaderViewController: UIViewController {
@IBOutlet weak var videoPreview: UIView!
private var videoLayer: CALayer!
var codeReader: CodeReader!
override func viewDidLoad() {
videoLayer = codeReader.videoPreview
videoPreview.layer.addSublayer(videoLayer)
extension AVCodeReader: CodeReader {
func startReading(completion: @escaping (String) -> Void) {
self.didRead = completion
captureSession?.startRunning()
}
func stopReading() {
captureSession?.stopRunning()
}
}
extension AVCodeReader: AVCaptureMetadataOutputObjectsDelegate {
func metadataOutput(_ captureOutput: AVCaptureMetadataOutput,
didOutput metadataObjects: [AVMetadataObject],
from connection: AVCaptureConnection) {
guard let readableCode = metadataObjects.first as? AVMetadataMachineReadableCodeObject,
let code = readableCode.stringValue else {
return
}
//Vibrate the phone
override init() {
super.init()
//Make sure the device can handle video
guard let videoDevice = AVCaptureDevice.default(for: .video),
let deviceInput = try? AVCaptureDeviceInput(device: videoDevice) else {
return
}
//session
protocol CodeReader {
func startReading(completion: @escaping (String) -> Void)
func stopReading()
var videoPreview: CALayer {get}
}