QRCodeReader.swift

Supported Platforms Version

QRCodeReader.swift 是一个简单的代码阅读器(最初仅支持 QRCode),用于 iOS 平台,使用 Swift 语言编写。它基于 Apple 的 AVFoundation 框架,旨在替代 iOS 8.0 及更高版本上的 ZXing 或 ZBar。它可以解码这些 格式类型

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

QRCodeReader.swift screenshot

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

要求

使用方法

在 iOS 10+ 中,您首先需要说明相机的使用原因。为此,您需要在您的 Info.plist 文件中添加 Privacy - Camera Usage Description (NSCameraUsageDescription) 字段。

privacy - camera usage description

然后只需按照以下步骤操作

// 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

安装到您的项目中

$ pod install

从 .xcworkspace 文件(而不是通常的项目文件)在 Xcode 中打开您的项目

$ open MyProject.xcworkspace

现在您可以将 import QRCodeReader 框架导入到您的文件中了。

Carthage

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

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

$ brew update
$ brew install carthage

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

github "yannickl/QRCodeReader.swift" >= 10.1.0

Swift Package Manager

您可以使用 Swift Package Manager 来安装 QRCodeReader.swift,方法是将正确的描述添加到您的 Package.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 Package Manager 仍处于早期设计和开发阶段,有关更多信息,请查看其 GitHub 页面

手动安装

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

联系方式

Yannick Loriot

许可证 (MIT)

版权所有 (c) 2014-至今 - Yannick Loriot

特此授权,免费授予任何人获得本软件和相关文档文件(“软件”)副本的许可,以便不受限制地处理本软件,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或销售本软件副本的权利,并允许向接受本软件的个人提供本软件,但须符合以下条件

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

本软件按“原样”提供,不提供任何形式的明示或暗示的保证,包括但不限于适销性、特定用途的适用性和不侵权的保证。在任何情况下,作者或版权持有人均不对任何索赔、损害或其他责任负责,无论是在合同诉讼、侵权诉讼或其他诉讼中,由本软件或本软件的使用或其他交易引起、产生或与之相关。