此 pod 包含一个用于文档扫描的现成视图控制器。是的,我们可以扫描!
iOS 13 包含了 Apple 提供的类 VNDocumentCameraViewController
,这个类可能比这个 pod 实现的结果更好,且错误更少。
如果您的应用程序针对的是 iOS 13 或更高版本,请考虑使用它而不是此 pod。
要求
- iOS 10.0 SDK 或更高版本
版本 | YesWeScan |
---|---|
<= 10.1 | <= 1.3.0 |
>= 10.2 | => 2.0.0 |
扫描器预览
安装
CocoaPods
YesWeScan 可以通过 CocoaPods 获取。要安装它,只需在您的 Podfile
中添加以下行
pod 'YesWeScan', ~> '2.0'
Carthage
YesWeScan 也可以通过 Carthage 获取。在您的 Cartfile
中添加以下行
github "adorsys/YesWeScan"
Swift 包管理器
从版本 2.2.0 开始,Swift 包管理器 也得到支持
按照如下方式将其添加到项目中
dependencies: [
.package(url: "https://github.com/adorsys/YesWeScan.git", from: "2.2.0")
]
使用
扫描仪需要访问相机。为了允许这样做,您的 Info.plist
必须包含 NSCameraUsageDescription
键。
扫描视图控制器
本项目中的主要类是 ScannerViewController
。您可以使用 import YesWeScan
来访问它。
import YesWeScan
class ViewController: UIViewController {
var scannedImage: UIImage?
override func viewDidLoad() {
super.viewDidLoad()
let scanner = ScannerViewController()
scanner.delegate = self
navigationController?.pushViewController(scanner, animated: true)
}
}
委托方法
如果没有委托,扫描仪将 不会 捕获图像。因此,您应该设置 ScannerViewController
的 delegate
属性。
当扫描仪找到适质量图像时,您将收到调用
extension ViewController: ScannerViewControllerDelegate {
func scanner(_ scanner: ScannerViewController, didCaptureImage image: UIImage) {
scannedImage = image
navigationController?.popViewController(animated: true)
}
}
扫描器质量
您可以使用jitter
属性来自定义扫描器的精确度。更高的值将使捕获图像更容易,但不会那么稳定。
这里的默认值是100
。
可以在初始化时通过传递ScannerViewController
一个AVCaptureSession.Preset
来配置扫描器的分辨率。默认值是.high
。如果提供的预设不被捕获设备支持,则将回退到默认值。
自动捕获前所需的图像特征
您可以通过更改变量scanningQuality
来控制图像的扫描质量。对scanningQuality
的更改将影响在捕获之前所需的功能数量。
enum Quality {
case high, medium, fast
}
默认值是.medium
,且此变量在ScannerViewController
中可用。
scanner.scanningQuality = .fast
UI 配置
可以使用初始化方法配置扫描器的 UI。
ScannerViewController(config: [.torch, .manualCapture])
以下选项可用:
.targetBraces
:切换定位括号的按钮.torch
:控制手电筒的按钮.manualCapture
:手动相机快门.progressBar
:当前扫描的进度条
这里的默认值是.all
。
您还可以配置previewColor
(扫描预览矩形的颜色)和braceColor
(目标探针括号的颜色)。
这里的默认值分别是UIColor.green
和UIColor.red
。
Siri 快捷方式
扫描器示例项目自 iOS 12* 起支持 Siri 快捷方式。用户自己的快捷方式会打开应用并导航到文档扫描器。您可以在示例项目中找到实现方法。
实现方式如下:在项目中激活 Siri 并在 info.plist
中添加一个 NSUserActivityTypes
标识符。然后通过在项目中使用以下行激活 Siri 快捷方式:
if #available(iOS 12.0, *) {
let identifier = Bundle.main.userActivityIdentifier
let activity = NSUserActivity(activityType: identifier)
activity.title = "The String the User will see in preferences"
activity.userInfo = ["Document Scanner": "open document scanner"]
activity.isEligibleForSearch = true
activity.isEligibleForPrediction = true
activity.persistentIdentifier = NSUserActivityPersistentIdentifier(identifier)
view.userActivity = activity
activity.becomeCurrent()
}
要调用特定的函数,例如 openDocumentScanner()
,请将其添加到 AppDelegate
中:
func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
if #available(iOS 12.0, *) {
guard userActivity.activityType == Bundle.main.userActivityIdentifier,
let navigationController = window?.rootViewController as? UINavigationController,
let viewController = navigationController.children.first as? ViewController else {
return false
}
viewController.openDocumentScanner()
return true
} else {
return false
}
}
直接使用扫描仪
也可以在不使用ScannerViewController
类(这是该库的一部分)的情况下使用扫描仪类。
作为一个如何做到这一点的例子,请查看CustomUIViewController
类。
许可证
YesWeScan遵循Apache 2.0 许可证发布。请参见LICENSE文件以获取更多信息。