BarcodeScanner is a simple and beautiful wrapper around the camera with barcode capturing functionality and a great user experience.
![]()
To start capturing just instantiate BarcodeScannerViewController, set needed
delegates and present it:
let viewController = BarcodeScannerViewController()
viewController.codeDelegate = self
viewController.errorDelegate = self
viewController.dismissalDelegate = self
present(viewController, animated: true, completion: nil)
You can also push BarcodeScannerViewController to your navigation stack:
let viewController = BarcodeScannerViewController()
viewController.codeDelegate = self
navigationController?.pushViewController(viewController, animated: true)
Code delegate
Use BarcodeScannerCodeDelegate when you want to get the captured code back.
extension ViewController: BarcodeScannerCodeDelegate {
func barcodeScanner(_ controller: BarcodeScannerViewController, didCaptureCode code: String, type: String) {
print(code)
controller.reset()
}
}
Error delegate
Use BarcodeScannerErrorDelegate when you want to handle session errors.
extension ViewController: BarcodeScannerErrorDelegate {
func barcodeScanner(_ controller: BarcodeScannerViewController, didReceiveError error: Error) {
print(error)
}
}
Dismissal delegate
Use BarcodeScannerDismissalDelegate to handle "Close button" tap.
Please note that BarcodeScannerViewController doesn't dismiss itself if
it was presented initially.
extension ViewController: BarcodeScannerDismissalDelegate {
func barcodeScannerDidDismiss(_ controller: BarcodeScannerViewController) {
controller.dismiss(animated: true, completion: nil)
}
}
When the code is captured BarcodeScannerViewController switches to the processing
mode:
While the user sees a nice loading animation you can perform some background task, for example make a network request to fetch product info based on the code. When the task is done you have 3 options to proceed:
BarcodeScannerViewController and show your results.func barcodeScanner(_ controller: BarcodeScannerViewController, didCaptureCode code: String, type: String) {
// Code processing
controller.dismiss(animated: true, completion: nil)
}
func barcodeScanner(_ controller: BarcodeScannerViewController, didCaptureCode code: String, type: String) {
// Code processing
controller.resetWithError(message: "Error message")
// If message is not provided the default message will be used instead.
}
func barcodeScanner(_ controller: BarcodeScannerViewController, didCaptureCode code: String, type: String) {
// Code processing
controller.reset(animated: true)
}
If you want to do continuous barcode scanning just set the isOneTimeSearch
property on your BarcodeScannerViewController instance to false.
We styled BarcodeScanner to make it look nice, but you can always use public properties or inheritance to customize its appearance.
Header
let viewController = BarcodeScannerViewController()
viewController.headerViewController.titleLabel.text = "Scan barcode"
viewController.headerViewController.closeButton.tintColor = .red
Please note that HeaderViewController is visible only when
BarcodeScannerViewController is being presented.
Footer and messages
let viewController = BarcodeScannerViewController()
viewController.messageViewController.regularTintColor = .black
viewController.messageViewController.errorTintColor = .red
viewController.messageViewController.textLabel.textColor = .black
Camera
let viewController = BarcodeScannerViewController()
// Change focus view style
viewController.cameraViewController.barCodeFocusViewType = .animated
// Show camera position button
viewController.cameraViewController.showsCameraButton = true
// Set settings button text
let title = NSAttributedString(
string: "Settings",
attributes: [.font: UIFont.boldSystemFont(ofSize: 17), .foregroundColor : UIColor.white]
)
viewController.cameraViewController.settingButton.setAttributedTitle(title, for: UIControlState())
Metadata
// Add extra metadata object type
let viewController = BarcodeScannerViewController()
viewController.metadata.append(AVMetadataObject.ObjectType.qr)
BarcodeScanner is available through CocoaPods. To install it, simply add the following line to your Podfile:
pod 'BarcodeScanner'
In order to quickly try the demo project of a BarcodeScanner just run
pod try BarcodeScanner in your terminal.
BarcodeScanner is also available through Carthage. To install just write into your Cartfile:
github "hyperoslo/BarcodeScanner"
To install BarcodeScanner manually just download and drop Sources and
Images folders in your project.
Hyper Interaktiv AS, ios@hyper.no
We would love you to contribute to BarcodeScanner, check the CONTRIBUTING file for more info.
BarcodeScanner is available under the MIT license. See the LICENSE file for more info.