Skip to content

Commit 303bd5a

Browse files
authored
Merge pull request #131 from qalandarov/main
Ability to pause scanning (i.e. when presenting)
2 parents 9302aa1 + 24ffca4 commit 303bd5a

File tree

2 files changed

+11
-5
lines changed

2 files changed

+11
-5
lines changed

Sources/CodeScanner/CodeScanner.swift

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,7 @@ public struct CodeScannerView: UIViewControllerRepresentable {
8585
public var simulatedData = ""
8686
public var shouldVibrateOnSuccess: Bool
8787
public var isTorchOn: Bool
88+
public var isPaused: Bool
8889
public var isGalleryPresented: Binding<Bool>
8990
public var videoCaptureDevice: AVCaptureDevice?
9091
public var completion: (Result<ScanResult, ScanError>) -> Void
@@ -99,6 +100,7 @@ public struct CodeScannerView: UIViewControllerRepresentable {
99100
simulatedData: String = "",
100101
shouldVibrateOnSuccess: Bool = true,
101102
isTorchOn: Bool = false,
103+
isPaused: Bool = false,
102104
isGalleryPresented: Binding<Bool> = .constant(false),
103105
videoCaptureDevice: AVCaptureDevice? = AVCaptureDevice.bestForVideo,
104106
completion: @escaping (Result<ScanResult, ScanError>) -> Void
@@ -112,6 +114,7 @@ public struct CodeScannerView: UIViewControllerRepresentable {
112114
self.simulatedData = simulatedData
113115
self.shouldVibrateOnSuccess = shouldVibrateOnSuccess
114116
self.isTorchOn = isTorchOn
117+
self.isPaused = isPaused
115118
self.isGalleryPresented = isGalleryPresented
116119
self.videoCaptureDevice = videoCaptureDevice
117120
self.completion = completion

Sources/CodeScanner/ScannerViewController.swift

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import UIKit
1212
@available(macCatalyst 14.0, *)
1313
extension CodeScannerView {
1414

15-
public class ScannerViewController: UIViewController, UINavigationControllerDelegate {
15+
public final class ScannerViewController: UIViewController, UINavigationControllerDelegate {
1616
private let photoOutput = AVCapturePhotoOutput()
1717
private var isCapturing = false
1818
private var handler: ((UIImage?) -> Void)?
@@ -174,7 +174,7 @@ extension CodeScannerView {
174174
}
175175

176176
private func setupSession() {
177-
guard let captureSession = captureSession else {
177+
guard let captureSession else {
178178
return
179179
}
180180

@@ -436,9 +436,12 @@ extension CodeScannerView {
436436
extension CodeScannerView.ScannerViewController: AVCaptureMetadataOutputObjectsDelegate {
437437
public func metadataOutput(_ output: AVCaptureMetadataOutput, didOutput metadataObjects: [AVMetadataObject], from connection: AVCaptureConnection) {
438438
if let metadataObject = metadataObjects.first {
439-
guard let readableObject = metadataObject as? AVMetadataMachineReadableCodeObject else { return }
440-
guard let stringValue = readableObject.stringValue else { return }
441-
guard !didFinishScanning && !isCapturing else { return }
439+
guard !parentView.isPaused && !didFinishScanning && !isCapturing,
440+
let readableObject = metadataObject as? AVMetadataMachineReadableCodeObject,
441+
let stringValue = readableObject.stringValue
442+
else {
443+
return
444+
}
442445

443446
handler = { [self] image in
444447
let result = ScanResult(string: stringValue, type: readableObject.type, image: image, corners: readableObject.corners)

0 commit comments

Comments
 (0)