TCBBarcode 0.1.4

TCBBarcode 0.1.4

Neil Francis Ramirez HiponaNeil Francis Ramirez Hipona 维护。



  • 作者:
  • nferocious76

TCBBarcode

演示

示例

要运行示例项目,请克隆仓库,然后从 Example 目录运行 pod install

特点

  • 条形码扫描器
  • 条形码扫描器视图
  • 条形码生成器

要求

  • iOS 13.0+
  • Xcode 11.0+

安装

Cocoapods

TCBBarcode 可以通过 CocoaPods 获得。要安装 TCBBarcode,只需将以下行添加到您的 Podfile 文件中

pod 'TCBBarcode'

用法

生成器

let generator = TCBBarcodeGenerator(transform: CGAffineTransform(scaleX: 10, y: 10))

// .QRCode(level: .levelH)
if let code = generator.generateCode(forType: .QRCode(), source: inputeTxtFld.text!.cleanString) {
    
    imageView.image = code
}

扫描器

var previewView: UIView!
var scanner: TCBBarcodeScanner!

func setupScanner(frame: CGRect) {
    scanner = TCBBarcodeScanner(supportedTypes: TCBBarcodeScanner.availableTypes, playSoundOnSuccess: true
    , delegate: self)
    
    let previewFrame = CGRect(x: 0, y: 0, width: frame.width, height: frame.height - TCBBarcodeScannerView.codeLblHeight)
    if let previewLayer = scanner.previewLayer(withFrame: previewFrame) {
        previewView.layer.addSublayer(previewLayer)
    }else{
        let error = TCBBarcodeError.createCustomError(errorMessage: "Scanner preview configuration failed")
        print(error)
    }
}

func scan() {
    
    scanner.start()
}

func stop() {

    scanner.stop()
}

// MARK: - TCBBarcodeScannerDelegate

public func scanner(scanner: TCBBarcodeScanner, setupDidFail error: Error) {
    
    print(error)
}

public func scanner(scanner: TCBBarcodeScanner, didOutputCodeObject codeObject: TCBBarcodeScanner.CodeObject) {
    
    let codeStr = "\(codeObject.type): \(codeObject.code)"
    print(codeStr)
    
    switch detectType {
    case .box:
        showBox(frame: codeObject.bounds)
        
    case .line:
        showLine(corners: codeObject.corners)
        
    default:
        resetDetectView()
    }
}

// MARK: - Controls

func resetDetectView() {
    
    detectView.isHidden = true
    
    for view in detectView.subviews {
        view.removeFromSuperview()
    }
    
    if let sublayers = detectView.layer.sublayers {
        for layer in sublayers {
            layer.removeFromSuperlayer()
        }
    }
}

func showBox(frame: CGRect) {
    resetDetectView()
    
    let codeBox = UIView(frame: frame)
    codeBox.backgroundColor = UIColor.lightGray.withAlphaComponent(0.5)
    detectView.addSubview(codeBox)
    detectView.isHidden = false
}

func showLine(corners: [CGPoint]) {
    resetDetectView()
    
    let bezierPath = UIBezierPath(rect: previewView.frame)

    for (idx, point) in corners.enumerated() {
        if idx > 0 {
            bezierPath.addLine(to: point)
        }else{
            bezierPath.move(to: point)
        }
    }
    
    bezierPath.close()

    let shapeLayer = CAShapeLayer()
    shapeLayer.path = bezierPath.cgPath
    shapeLayer.strokeColor = UIColor.orange.cgColor
    shapeLayer.lineWidth = 1
    shapeLayer.fillRule = .evenOdd
    shapeLayer.fillColor = UIColor.clear.cgColor
    shapeLayer.borderColor = UIColor.clear.cgColor
    shapeLayer.borderWidth = 0
    
    detectView.layer.addSublayer(shapeLayer)
    detectView.isHidden = false
}

扫描视图

var scannerView: TCBBarcodeScannerView!

func prepareScannerView() {
    
    let screenFrame = UIScreen.main.bounds
    let previewSize = CGSize(width: screenFrame.width - 40, height: 300)
    let scannerSize = TCBBarcodeScannerView.scannerFrameSizeFor(previewFrameSize: previewSize)
    let scannerFrame = CGRect(x: 20, y: 80, width: scannerSize.width, height: scannerSize.height)
    
    scannerView = TCBBarcodeScannerView.instance(frame: scannerFrame, delegate: self)
    view.addSubview(scannerView)
}

func changeDetectType() {

    scannerView.detectType = .line
}

func startScan() {

    scannerView.scan()
}

// MARK: - TCBBarcodeScannerViewDelegate

func scannerView(scannerView: TCBBarcodeScannerView, setupDidFail error: Error) {
    
}

func scannerView(scannerView: TCBBarcodeScannerView, didOutputCode code: String, codeType type: String) {
    print("Readable Type: \(type) -- Code: \(code)")
}

作者

nferocious76,[email protected]

许可证

TCBBarcode 在 MIT 许可证下可用。有关更多信息,请参阅 LICENSE 文件。