Skip to content

Instantly share code, notes, and snippets.

private func isCodeInLimitBounds(codeReadable: AVMetadataMachineReadableCodeObject) -> Bool {
if let videoLayer = previewLayer as? AVCaptureVideoPreviewLayer,
let transformedObj = videoLayer.transformedMetadataObject(for: codeReadable),
let limitBounds = limitBounds {
return limitBounds.contains(transformedObj.bounds)
}
//ignore 'failure' above
return true
}
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)
override func setUp() {
super.setUp()
let mainStoryboard = UIStoryboard(name: "Main", bundle: nil)
readerVC = mainStoryboard.instantiateViewController(withIdentifier: "ReaderViewController") as! ReaderViewController
readerVC.dataSource = MockDataSource()
readerVC.codeReader = mockReader
//force the life cycle to be called
let window = UIApplication.shared.delegate!.window!
extension AVCodeReader: CodeReader {
func startReading(completion: @escaping (String) -> Void) {
self.didRead = completion
captureSession?.startRunning()
}
func stopReading() {
captureSession?.stopRunning()
}
}
protocol CodeReader {
func startReading(completion: @escaping (String) -> Void)
func stopReading()
var videoPreview: CALayer {get}
}