Created
August 15, 2019 09:11
-
-
Save yaakovgamliel/caa07525bd7cc45895a138434f63ccd2 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//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