描述
BarcodeScanner 是围绕拥有条码捕获功能的相机的一个简单、美观的包装器,具有出色的用户体验。
- 条码扫描。
- 状态模式:扫描、处理、未经授权、未找到。
- 处理相机授权状态。
- 动画焦点视图和自定义加载指示器。
- 手电筒模式切换。
- 自定义颜色、信息和错误消息。
- 无外部依赖。
- 示例项目.
目录
使用
控制器
要开始捕捉,只需实例化 BarcodeScannerViewController
,设置所需的代理并显示它
let viewController = BarcodeScannerViewController()
viewController.codeDelegate = self
viewController.errorDelegate = self
viewController.dismissalDelegate = self
present(viewController, animated: true, completion: nil)
您还可以将 BarcodeScannerViewController
推送到您的导航栈中
let viewController = BarcodeScannerViewController()
viewController.codeDelegate = self
navigationController?.pushViewController(viewController, animated: true)
委托者
代码委托
当您想获取捕获的代码时,请使用 BarcodeScannerCodeDelegate
。
extension ViewController: BarcodeScannerCodeDelegate {
func scanner(_ controller: BarcodeScannerViewController, didCaptureCode code: String, type: String) {
print(code)
controller.reset()
}
}
错误委托
当您想处理会话错误时,请使用 BarcodeScannerErrorDelegate
。
extension ViewController: BarcodeScannerErrorDelegate {
func scanner(_ controller: BarcodeScannerViewController, didReceiveError error: Error) {
print(error)
}
}
消失委托
使用 BarcodeScannerDismissalDelegate
来处理“关闭按钮”的点击。 请注意,如果 BarcodeScannerViewController
首先被展示,则它本身不会消失。
extension ViewController: BarcodeScannerDismissalDelegate {
func scannerDidDismiss(_ controller: BarcodeScannerViewController) {
controller.dismiss(animated: true, completion: nil)
}
}
操作
代码被捕获时,BarcodeScannerViewController
切换到处理模式
在用户看到不错的加载动画时,您可以执行一些后台任务,例如根据代码发出网络请求以获取产品信息。当任务完成时,您可以按以下三种方式继续操作
- 关闭
BarcodeScannerViewController
并显示您的结果。
func scanner(_ controller: BarcodeScannerViewController, didCaptureCode code: String, type: String) {
// Code processing
controller.dismiss(animated: true, completion: nil)
}
- 显示错误消息并切换回扫描模式(例如,当在您的数据库中没有找到给定条码的产品时)
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.
}
- 将控制器重置为扫描模式(带或不带动画)
func scanner(_ controller: BarcodeScannerViewController, didCaptureCode code: String, type: String) {
// Code processing
controller.reset(animated: true)
}
如果想要进行连续的条码扫描,只需将 BarcodeScannerViewController
实例上的 isOneTimeSearch
属性设置为 false
即可。
定制
我们根据条码扫描器进行了样式设计,使它看起来更美观,但您始终可以使用公共属性或继承来自定义其外观。
标题
let viewController = BarcodeScannerViewController()
viewController.headerViewController.titleLabel.text = "Scan barcode"
viewController.headerViewController.closeButton.tintColor = .red
请注意,只有在 BarcodeScannerViewController
正在被展示时,HeaderViewController
才会可见。
页脚和消息
let viewController = BarcodeScannerViewController()
viewController.messageViewController.regularTintColor = .black
viewController.messageViewController.errorTintColor = .red
viewController.messageViewController.textLabel.textColor = .black
相机
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())
元数据
// Add extra metadata object type
let viewController = BarcodeScannerViewController()
viewController.metadata.append(AVMetadataObject.ObjectType.qr)
安装
BarcodeScanner 通过 CocoaPods 提供。要安装,只需将以下行添加到您的 Podfile 中
pod 'BarcodeScanner'
不要忘了在您的 Info.plist 文件中设置 Privacy - Camera Usage Description
,否则应用会崩溃并返回 SIGBART。
为了快速尝试条形码扫描仪的演示项目,只需在终端中运行 pod try BarcodeScanner
。
BarcodeScanner 还可以通过 Carthage 获得。只需将以下内容写入您的 Cartfile 中即可安装:
github "hyperoslo/BarcodeScanner"
要手动安装 BarcodeScanner,请下载并将 Sources
和 Images
文件夹拖放到您的项目中。
作者
Hyper Interaktiv AS,[email protected]
贡献
我们很高兴您为 BarcodeScanner 贡献,有关更多信息,请参阅 CONTRIBUTING 文件。
许可证
BarcodeScanner 在 MIT 许可证下可用。有关更多信息,请参阅 LICENSE 文件。