Cicada 0.1.0

Cicada 0.1.0

Carson Hawley维护。



Cicada 0.1.0

Cicada

一个由Swift编写的简小而通用的二维码扫描器

iOS Platform Swift Language MIT License

安装

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文件。