Lightweight library which allows reading various barcode types on iOS devices
BarCodeReader
Lightweight library which allows reading various barcode types on iOS devices. Supported barcode types are included in AVMetadataObject.ObjectType.
Original work by Chris Greening is available here: https://github.com/cgreening/BarCodeExample.
Usage
Swift
class ViewController: UIViewController {
@IBOutlet weak var scanButton: UIButton!
@IBOutlet weak var resultLabel: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
scanButton.addTarget(self, action: #selector(startScanner), for: .touchUpInside)
}
@objc private func startScanner() {
let v = CMGViewController()
v.delegate = self
present(v, animated: true, completion: nil)
}
}
extension ViewController: CMGViewControllerDelegate {
func didScan(result: String) {
resultLabel.text = "Scanned: \(result)"
}
func didFail(error: Error) {
let error = error as NSError
dismiss(animated: true) { [weak self] in
let alert = UIAlertController(title: error.localizedDescription, message: error.localizedRecoverySuggestion, preferredStyle: .alert)
alert.addAction(UIAlertAction(title: "OK", style: .default, handler: nil))
self?.present(alert, animated: true, completion: nil)
}
}
func dataTypes() -> [AVMetadataObject.ObjectType] {
return [.qr]
}
}
Objective-C
- (void)startScan {
CMGViewController *v = [[CMGViewController alloc] init];
v.delegate = self;
v.modalPresentationStyle = UIModalPresentationFormSheet;
[self presentViewController:v animated:true completion:nil];
}
#pragma mark - CMGViewControllerDelegate
- (void)didScanWithResult:(NSString *)result {
DDLogDebug(@"Scanned code with result: %@", result);
}
- (void)didFailWithError:(NSError *)error {
DDLogError(@"Failed to scan code with error: %@", error);
}
- (NSArray<AVMetadataObjectType> *)dataTypes {
return @[AVMetadataObjectTypeQRCode];
}
License
BarCodeReader is available under the BSD-2-Clause License. See the LICENSE file for more info.