QRCodeReader.swift 是一个简单的代码阅读器(最初仅支持 QRCode),用于 iOS 平台,使用 Swift 语言编写。它基于 Apple 的 AVFoundation
框架,旨在替代 iOS 8.0 及更高版本上的 ZXing 或 ZBar。它可以解码这些 格式类型。
它提供了一个默认的视图控制器来显示带有扫描区域叠加层的相机视图,并且还提供了一个按钮来切换前后摄像头。
在 iOS 10+ 中,您首先需要说明相机的使用原因。为此,您需要在您的 Info.plist 文件中添加 Privacy - Camera Usage Description (NSCameraUsageDescription) 字段。
然后只需按照以下步骤操作
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,请先安装
$ [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 是一个去中心化的依赖管理器,它可以自动执行将框架添加到您的 Cocoa 应用程序的过程。
您可以使用 Homebrew 和以下命令安装 Carthage
$ brew update
$ brew install carthage
要将 QRCodeReader
集成到您的 Xcode 项目中,请在使用 Carthage,请在您的 Cartfile
文件中指定它
github "yannickl/QRCodeReader.swift" >= 10.1.0
您可以使用 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
版权所有 (c) 2014-至今 - Yannick Loriot
特此授权,免费授予任何人获得本软件和相关文档文件(“软件”)副本的许可,以便不受限制地处理本软件,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或销售本软件副本的权利,并允许向接受本软件的个人提供本软件,但须符合以下条件
上述版权声明和本许可声明应包含在本软件的所有副本或主要部分中。
本软件按“原样”提供,不提供任何形式的明示或暗示的保证,包括但不限于适销性、特定用途的适用性和不侵权的保证。在任何情况下,作者或版权持有人均不对任何索赔、损害或其他责任负责,无论是在合同诉讼、侵权诉讼或其他诉讼中,由本软件或本软件的使用或其他交易引起、产生或与之相关。