YesWeScan 2.2.2

YesWeScan 2.2.2

iOS 团队 adorsys 维护。



YesWeScan 2.2.2

  • Xavier Lowmiller 和 steffen blümm

YesWeScan

Build Status Swift 5.0 license platform Carthage compatible SPM compatible

此 pod 包含一个用于文档扫描的现成视图控制器。是的,我们可以扫描!

VNDocumentCameraViewController,这个类可能比这个 pod 实现的结果更好,且错误更少。

如果您的应用程序针对的是 iOS 13 或更高版本,请考虑使用它而不是此 pod。

要求

  • iOS 10.0 SDK 或更高版本
版本 YesWeScan
<= 10.1 <= 1.3.0
>= 10.2 => 2.0.0

扫描器预览

Demo

安装

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 键。

An info.plist entry for 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)
  }
}

委托方法

如果没有委托,扫描仪将 不会 捕获图像。因此,您应该设置 ScannerViewControllerdelegate 属性。

当扫描仪找到适质量图像时,您将收到调用

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.greenUIColor.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文件以获取更多信息。