Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save yaakovgamliel/caa07525bd7cc45895a138434f63ccd2 to your computer and use it in GitHub Desktop.
Save yaakovgamliel/caa07525bd7cc45895a138434f63ccd2 to your computer and use it in GitHub Desktop.
//When the user taps a button we call this function
func presentScanner() {
let t = viewModel.transaction
guard let recognizerRunnerController = RecognizerProvider().controller(transaction: t) else { return }
self.navigationController?.pushViewController(recognizerRunnerController, animated: true)
}
// The RecognizerProvider looks like this
//This class configures the custome overlay scanner to be presented:
class RecognizerProvider {
var pdf417Recognizer : MBPdf417Recognizer?
var barcodeRecognizer : MBBarcodeRecognizer?
func controller(transaction: OngoingTransaction) -> UIViewController? {
MBMicroblinkSDK.sharedInstance().setLicenseKey("license")
/** Create barcode recognizer */
self.barcodeRecognizer = MBBarcodeRecognizer()
self.barcodeRecognizer?.scanQrCode = true
self.pdf417Recognizer = MBPdf417Recognizer()
self.pdf417Recognizer?.scanUncertain = true
/** Crate recognizer collection */
let recognizerList = [self.pdf417Recognizer!, self.barcodeRecognizer!]
let recognizerCollection = MBRecognizerCollection(recognizers: recognizerList)
/** Create your overlay view controller */
let customOverlayViewController = OverlayViewController.instantiate(transaction: transaction)
/** This has to be called for custom controller */
customOverlayViewController.reconfigureRecognizers(recognizerCollection)
/** Create recognizer view controller with wanted overlay view controller */
return MBViewControllerFactory.recognizerRunnerViewController(
withOverlayViewController: customOverlayViewController)
}
}
Now this is tha delegate function in the overlay controller
extension OverlayViewController: MBScanningRecognizerRunnerViewControllerDelegate {
func recognizerRunnerViewController(_ recognizerRunnerViewController: UIViewController & MBRecognizerRunnerViewController,
didFinishScanningWith state: MBRecognizerResultState) {
if state == MBRecognizerResultState.valid {
DispatchQueue.main.sync { [weak self] in
guard let s = self else { return }
s.recognizerRunnerViewController?.pauseScanning()
s.recognizerRunnerViewController?.pauseCamera()
for recognizer in s.recognizerCollection.recognizerList where
recognizer.baseResult?.resultState == MBRecognizerResultState.valid && recognizer is MBPdf417Recognizer {
let pdf417Recognizer = recognizer as? MBPdf417Recognizer
if let rawData = pdf417Recognizer?.result.stringData {
<talk to our server here>
}
}
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment