QRCodeReader.swift 10.1.0

QRCodeReader.swift 10.1.0

测试已测试
Lang语言 SwiftSwift
许可证 MIT
Released上次发布2019年5月
SPM支持SPM

Yannick Loriot维护。




QRCodeReader.swift

Supported Platforms Version

QRCodeReader.swift是一个简单的代码读取器(最初仅用于QR码),适用于iOS的Swift编程语言。它基于苹果的AVFoundation框架,以替代iOS 8.0及更高版本中的ZXing或ZBar。它可以解码以下格式类型

它提供了一个默认视图控制器来显示带有扫描区域覆盖的相机视图,并且还提供了一个按钮来切换前后摄像头。

QRCodeReader.swift screenshot

要求 • 使用方法 • 安装 • 联系方式 • 许可证

要求

  • iOS 8.0+
  • Xcode 10.0+
  • Swift 5.0+

使用方法

在iOS10+中,您需要首先考虑摄像头使用问题。为此,您需要在Info.plist中添加《Privacy - Camera Usage Description》域(NSCameraUsageDescription)

privacy - camera usage description

然后只需按照以下步骤进行:

  • 添加代理QRCodeReaderViewControllerDelegate
  • 添加import AVFoundation
  • 添加import QRCodeReader
  • QRCodeReaderViewControllerDelegate实现:
// Good practice: create the reader lazily to avoid cpu overload during the
// initialization and each time we need to scan a QRCode
lazy var readerVC: QRCodeReaderViewController = {
    let builder = QRCodeReaderViewControllerBuilder {
        $0.reader = QRCodeReader(metadataObjectTypes: [.qr], captureDevicePosition: .back)
        
        // Configure the view controller (optional)
        $0.showTorchButton        = false
        $0.showSwitchCameraButton = false
        $0.showCancelButton       = false
        $0.showOverlayView        = true
        $0.rectOfInterest         = CGRect(x: 0.2, y: 0.2, width: 0.6, height: 0.6)
    }
    
    return QRCodeReaderViewController(builder: builder)
}()

@IBAction func scanAction(_ sender: AnyObject) {
  // Retrieve the QRCode content
  // By using the delegate pattern
  readerVC.delegate = self

  // Or by using the closure pattern
  readerVC.completionBlock = { (result: QRCodeReaderResult?) in
    print(result)
  }

  // Presents the readerVC as modal form sheet
  readerVC.modalPresentationStyle = .formSheet
 
  present(readerVC, animated: true, completion: nil)
}

// MARK: - QRCodeReaderViewController Delegate Methods

func reader(_ reader: QRCodeReaderViewController, didScanResult result: QRCodeReaderResult) {
  reader.stopScanning()

  dismiss(animated: true, completion: nil)
}

//This is an optional delegate method, that allows you to be notified when the user switches the cameraName
//By pressing on the switch camera button
func reader(_ reader: QRCodeReaderViewController, didSwitchCamera newCaptureDevice: AVCaptureDeviceInput) {
    if let cameraName = newCaptureDevice.device.localizedName {
      print("Switching capture to: \(cameraName)")
    }
}

func readerDidCancel(_ reader: QRCodeReaderViewController) {
  reader.stopScanning()

  dismiss(animated: true, completion: nil)
}

注意,您应该使用QRCodeReader.isAvailable()QRCodeReader.supportsMetadataObjectTypes()方法检查设备是否支持读取器库。

界面定制

您可以使用 QRCodeReaderDisplayable 协议和 QRCodeReaderViewControllerBuilder 中的 readerView 属性创建自己的界面来扫描 1D/2D 码。

class YourCustomView: UIView, QRCodeReaderDisplayable {
  let cameraView: UIView            = UIView()
  let cancelButton: UIButton?       = UIButton()
  let switchCameraButton: UIButton? = SwitchCameraButton()
  let toggleTorchButton: UIButton?  = ToggleTorchButton()
  var overlayView: UIView?          = UIView()

  func setupComponents(with builder: QRCodeReaderViewControllerBuilder) {
    // addSubviews
    // setup constraints
    // etc.
  }
}

lazy var reader: QRCodeReaderViewController = {
    let builder = QRCodeReaderViewControllerBuilder {
      let readerView = QRCodeReaderContainer(displayable: YourCustomView())

      $0.readerView = readerView
    }
    
    return QRCodeReaderViewController(builder: builder)
  }()

安装

在项目中使用 QRCodeReaderViewController 的推荐方法是使用 CocoaPods 软件包管理器,因为它提供灵活的依赖关系管理,安装简单。

CocoaPods

如果尚未安装,请安装 CocoaPods。

$ [sudo] gem install cocoapods
$ pod setup

前往您 Xcode 项目的目录,创建并编辑您的 Podfile,并将 QRCodeReader.swift 添加到相应的 TargetName 中。

$ cd /path/to/MyProject
$ touch Podfile
$ edit Podfile
source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '8.0'
use_frameworks!

target 'TargetName' do
    pod 'QRCodeReader.swift', '~> 10.1.0'
end

将 CocoaPods 集成到您的项目中。

$ pod install

从 .xcworkspace 文件(非常规项目文件)打开您的项目。

$ open MyProject.xcworkspace

现在您可以在文件中导入 QRCodeReader 框架。

Carthage

Carthage 是一个去中心化的依赖管理器,它自动处理将框架添加到您的 Cocoa 应用程序的过程。

您可以使用以下命令使用 Homebrew 安装 Carthage:

$ brew update
$ brew install carthage

要使用 Carthage 将 QRCodeReader 集成到您的 Xcode 项目中,请在您的 Cartfile 文件中指定它。

github "yannickl/QRCodeReader.swift" >= 10.1.0

Swift Package Manager

您可以通过在您的 Package.swift 文件中添加适当的描述来使用 Swift Package Manager 安装 QRCodeReader.swift

import PackageDescription

let package = Package(
    name: "YOUR_PROJECT_NAME",
    targets: [],
    dependencies: [
        .Package(url: "https://github.com/yannickl/QRCodeReader.swift.git", versions: "10.1.0" ..< Version.max)
    ]
)

请注意,Swift 包管理器仍处于早期设计和开发阶段,更多信息请访问其GitHub 页面

手动

下载项目,并将QRCodeReader文件夹复制到您的项目中以使用。

联系

Yannick Loriot

授权许可(MIT)

版权所有 (c)2014-现在 - Yannick Loriot

根据以下条件,免费 允许任何获得此软件及其相关文档副本(以下简称“软件”)的人在该软件上无限制地进行处理,包括但不限于使用的权利、复制的权利、修改的权利、合并的权利、发布的权利、分发权利、再授权权利以及/或出售软件副本的权利,并允许软件的供应对象这样做:

上述版权声明和本许可声明应当包含在软件的所有副本或主要内容中。

提供的软件“按原样”提供,不受任何明示或暗示的保证,包括但不限于适销性、适用于特定目的和无侵犯性的保证。在任何情况下,作者或版权所有者不对因软件或对该软件的使用或其他交易而产生的任何索赔、损害或其他责任负责,无论该损害是基于合同、侵权或其他原因。