Files
self/app/ios/Examples/Example_SPM/NFCPassportReaderApp/Views/MRZScannerViewController.swift
2023-10-14 14:46:20 +02:00

91 lines
3.2 KiB
Swift

//
// MRZScannerViewController.swift
// NFCPassportReaderApp
//
// Created by Andy Qua on 17/02/2021.
// Copyright © 2021 Andy Qua. All rights reserved.
//
import UIKit
import SwiftUI
import QKMRZScanner
// Wraps the QKMRZScanner component in a simple UIView that allows a scan of the MRZ area from a Passport/ID Card
struct MRZScanner: UIViewControllerRepresentable {
let completionHandler: (String,Date,Date) -> Void
func makeUIViewController(context: Context) -> MRZScannerViewController {
let vc = MRZScannerViewController()
vc.mrzScannerView.delegate = context.coordinator
return vc
}
func updateUIViewController(_ uiViewController: MRZScannerViewController, context: Context) {
}
func makeCoordinator() -> Coordinator {
return Coordinator(completionHandler: completionHandler)
}
final class Coordinator: NSObject, QKMRZScannerViewDelegate {
let completionHandler: (String,Date,Date) -> Void
init(completionHandler: @escaping (String,Date,Date) -> Void) {
self.completionHandler = completionHandler
}
func mrzScannerView(_ mrzScannerView: QKMRZScannerView, didFind scanResult: QKMRZScanResult) {
print(scanResult)
if let dob = scanResult.birthDate, let doe = scanResult.expiryDate {
completionHandler(scanResult.documentNumber, dob, doe)
}
}
}
}
// MARK: UIViewController implementation
class MRZScannerViewController: UIViewController {
let mrzScannerView = QKMRZScannerView()
override func viewDidLoad() {
super.viewDidLoad()
self.title = "Scan Passport"
self.navigationController?.title = "Scan passport"
let lbl = UILabel()
lbl.text = "Please scan the Machine Readable Zone."
lbl.numberOfLines = 0
self.view.addSubview(mrzScannerView)
self.view.addSubview(lbl)
mrzScannerView.translatesAutoresizingMaskIntoConstraints = false
mrzScannerView.topAnchor.constraint(equalTo: view.topAnchor, constant:50).isActive = true
mrzScannerView.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
mrzScannerView.widthAnchor.constraint(equalToConstant: view.bounds.width).isActive = true
mrzScannerView.heightAnchor.constraint(equalToConstant: view.bounds.width).isActive = true
lbl.translatesAutoresizingMaskIntoConstraints = false
lbl.leadingAnchor.constraint(equalTo: mrzScannerView.leadingAnchor, constant: 10).isActive = true
lbl.topAnchor.constraint(equalTo: mrzScannerView.bottomAnchor, constant: 10).isActive = true
lbl.trailingAnchor.constraint(equalTo: mrzScannerView.trailingAnchor, constant: 10).isActive = true
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
mrzScannerView.startScanning()
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
mrzScannerView.stopScanning()
}
}
extension MRZScannerViewController : QKMRZScannerViewDelegate {
func mrzScannerView(_ mrzScannerView: QKMRZScannerView, didFind scanResult: QKMRZScanResult) {
print(scanResult)
}
}