Cicada
一个由Swift编写的简小而通用的二维码扫描器
安装
Cocoapods
将以下包添加到您的Podfile中
platform :ios, '13.0'
use_frameworks!
target 'MyApp' do
pod 'Cicada', '~> 0.1.0'
end
快速入门
Cicada设计来尽可能减少手工操作。如果您需要快速示例
import Cicada
class ExampleViewController: UIViewController {
@IBOutlet private var previewView: UIView!
private let capture = Capture(types: [.qr], mode: .once)
override func viewDidLoad() {
super.viewDidLoad()
capture.start(preview: previewView) { result in
switch result {
case .success(let codes):
print("capture result: \(codes.first!.stringValue)")
case .failure(let error):
print("do something with error")
}
}
}
override func viewDidDisappear(_ animated: Bool) {
super.viewDidDisappear(animated)
capture.stop()
}
}
如果您更喜欢使用代理
class ExampleViewController: UIViewController, CicadaCaptureDelegate {
func capture(_ capture: Capture, didReceive result: Result) {
// handle the result here
}
}
请记住在尝试访问相机之前,在您的info.plist
中包含NSCameraUsageDescription
Cicada支持多种不同的捕获行为
.once
- 返回一个单独的代码。这是默认情况。.onceUnique
- 扫描多个代码,并返回每个唯一的代码.continuous
- 在调用capture.stop()
之前返回所有代码。代码以0.2秒的间隔流式传输以节省电池寿命
扫描区域
您可以限制代码检测的屏幕区域。最常见的情况是在视口框架内进行扫描
capture.scanArea = { self.viewfinder.frame }
显示手电筒
通过调用手动切换手电筒
capture.toggleTorch(on: true)
...或者允许系统根据需要自动开启手电筒
let capture = Capture(types: [.qr], autoTorch: true)
触觉反馈
您可以选择在检测到代码时振动设备。从最轻微到最明显的震动风格列表如下
HapticStyle.light
HapticStyle.medium
HapticStyle.heavy
HapticStyle.double
在.continuous
模式下忽略所有触觉反馈样式
相机方向
如果您的应用程序支持多个方向,则必须更新捕获预览以反映这些更改
override func viewDidLayoutSubviews() {
capture.autoResizePreview()
}
或者如果您的父类是UIView
override func layoutSubviews() {
super.layoutSubviews()
capture.autoResizePreview()
}
SwiftUI
Cicada还提供了一个自己的SwiftUI视图
struct ExampleView: View {
var body: some View {
CaptureView(mode: .once) { result in
switch result {
case .success(let codes):
codes.forEach { result in
print("Capture result: \(result.stringValue)")
}
case .failure(let error):
print("An error occured: \(error.localizedDescription)")
}
}
}
}
许可
Cicada受MIT许可。有关更多信息请参阅LICENSE文件。