QRScannerViewController.swift 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. //
  2. // QRScannerViewController.swift
  3. // Bark
  4. //
  5. // Created by huangfeng on 2022/3/10.
  6. // Copyright © 2022 Fin. All rights reserved.
  7. //
  8. import MercariQRScanner
  9. import RxCocoa
  10. import RxSwift
  11. import UIKit
  12. class QRScannerViewController: UIViewController {
  13. var scannerDidSuccess: Observable<String> {
  14. return self.rx.methodInvoked(#selector(didSeccess(code:))).map { a in
  15. try castOrThrow(String.self, a[0])
  16. }
  17. }
  18. let closeButton: UIButton = {
  19. let closeButton = UIButton(type: .custom)
  20. closeButton.setImage(UIImage(named: "baseline_close_white_48pt"), for: .normal)
  21. closeButton.tintColor = UIColor.white
  22. closeButton.backgroundColor = UIColor(white: 0, alpha: 0.2)
  23. closeButton.layer.cornerRadius = 40
  24. closeButton.clipsToBounds = true
  25. return closeButton
  26. }()
  27. override func viewDidLoad() {
  28. super.viewDidLoad()
  29. self.view.backgroundColor = UIColor.black
  30. let qrScannerView = QRScannerView(frame: view.bounds)
  31. qrScannerView.configure(delegate: self)
  32. view.addSubview(qrScannerView)
  33. view.addSubview(closeButton)
  34. closeButton.snp.makeConstraints { make in
  35. make.bottom.equalToSuperview().offset(-120)
  36. make.centerX.equalToSuperview()
  37. make.width.height.equalTo(80)
  38. }
  39. closeButton.rx.tap.subscribe { [weak self] in
  40. self?.dismiss(animated: true, completion: nil)
  41. } onError: { _ in }.disposed(by: rx.disposeBag)
  42. qrScannerView.startRunning()
  43. }
  44. }
  45. extension QRScannerViewController: QRScannerViewDelegate {
  46. func qrScannerView(_ qrScannerView: QRScannerView, didFailure error: QRScannerError) {
  47. self.showSnackbar(text: error.rawString())
  48. }
  49. func qrScannerView(_ qrScannerView: QRScannerView, didSuccess code: String) {
  50. self.didSeccess(code: code)
  51. self.dismiss(animated: true, completion: nil)
  52. }
  53. @objc private func didSeccess(code: String) {}
  54. }