BarcodeScanner

BarcodeScanner

Product Information

favorites Add to favorites

Programming languages

Public chat

Support Plans

There are currently no OSS plans available

If you are a provider or contributor to the repository, you can start adding your OSS plan.

Add an OSS plan
New to PieceX for OSS? Learn more here

Contact us if you are looking for a plan for this open source.

We will help you get in touch with professional providers.

Product Details

:mag_right: A simple and beautiful barcode scanner.

BarcodeScanner

CI Status Version Swift Carthage Compatible License Platform

Description

BarcodeScanner is a simple and beautiful wrapper around the camera with barcode capturing functionality and a great user experience.

  • [x] Barcode scanning.
  • [x] State modes: scanning, processing, unauthorized, not found.
  • [x] Handling of camera authorization status.
  • [x] Animated focus view and custom loading indicator.
  • [x] Torch mode switch.
  • [x] Customizable colors, informational and error messages.
  • [x] No external dependencies.
  • [x] Demo project.

Table of Contents

BarcodeScanner Icon

Usage

Controller

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)
BarcodeScanner scanning

You can also push `BarcodeScannerViewController` to your navigation stack: ```swift let viewController = BarcodeScannerViewController() viewController.codeDelegate = self navigationController?.pushViewController(viewController, animated: true) ``` ### Delegates **Code delegate** Use `BarcodeScannerCodeDelegate` when you want to get the captured code back. ```swift extension ViewController: BarcodeScannerCodeDelegate { func scanner(_ controller: BarcodeScannerViewController, didCaptureCode code: String, type: String) { print(code) controller.reset() } } ``` **Error delegate** Use `BarcodeScannerErrorDelegate` when you want to handle session errors. ```swift extension ViewController: BarcodeScannerErrorDelegate { func scanner(_ 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. ```swift extension ViewController: BarcodeScannerDismissalDelegate { func scannerDidDismiss(_ controller: BarcodeScannerViewController) { controller.dismiss(animated: true, completion: nil) } } ``` ### Actions When the code is captured `BarcodeScannerViewController` switches to the processing mode:
BarcodeScanner loading

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: 1. Dismiss `BarcodeScannerViewController` and show your results. ```swift func scanner(_ controller: BarcodeScannerViewController, didCaptureCode code: String, type: String) { // Code processing controller.dismiss(animated: true, completion: nil) } ``` 2. Show an error message and switch back to the scanning mode (for example, when there is no product found with a given barcode in your database):
BarcodeScanner error

```swift func scanner(_ 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. } ``` 3. Reset the controller to the scanning mode (with or without animation): ```swift func scanner(_ 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`. ### Customization We styled **BarcodeScanner** to make it look nice, but you can always use public properties or inheritance to customize its appearance. **Header** ```swift 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** ```swift let viewController = BarcodeScannerViewController() viewController.messageViewController.regularTintColor = .black viewController.messageViewController.errorTintColor = .red viewController.messageViewController.textLabel.textColor = .black ``` **Camera** ```swift let viewController = BarcodeScannerViewController() // Change focus view style viewController.cameraViewController.barCodeFocusViewType = .animated // Show camera position button viewController.cameraViewController.showsCameraButton = true // Set the initial camera position viewController.cameraViewController.initialCameraPosition = .front // Default is .back // 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** ```swift // Add extra metadata object type let viewController = BarcodeScannerViewController() viewController.metadata.append(AVMetadataObject.ObjectType.qr) ``` ## Installation **BarcodeScanner** is available through [CocoaPods](http://cocoapods.org). To install it, simply add the following line to your Podfile: ```ruby pod 'BarcodeScanner' ``` Don't forget to set a `Privacy - Camera Usage Description` in your Info.plist file, else the app will crash with a SIGBART. 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](https://github.com/Carthage/Carthage). To install just write into your Cartfile: ```ruby github "hyperoslo/BarcodeScanner" ``` To install **BarcodeScanner** manually just download and drop `Sources` and `Images` folders in your project. ## Author Hyper Interaktiv AS, ios@hyper.no ## Contributing We would love you to contribute to **BarcodeScanner**, check the [CONTRIBUTING](https://github.com/hyperoslo/BarcodeScanner/blob/master/CONTRIBUTING.md) file for more info. ## License **BarcodeScanner** is available under the MIT license. See the [LICENSE](https://github.com/hyperoslo/BarcodeScanner/blob/master/LICENSE.md) file for more info.
user-symbol

Stay in touch

Get Practical Tips For Business and Developers.

Learn about PieceX Community Needs for Source Code Projects.

Be the First to Know PieceX Newest Free Community Code Projects.