Advertisement
skaramicke

Nu jäklar!

Mar 1st, 2023
1,028
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Swift 2.41 KB | None | 0 0
  1. import Foundation
  2. import AVFoundation
  3.  
  4. //@objc(CodeScannerViewManager)
  5. //class CodeScannerViewManager: RCTViewManager {
  6. //
  7. //  @objc
  8. //  override func view() -> UIView! {
  9. //    let captureView = CodeScannerViewController()
  10. //    return captureView.view
  11. //  }
  12. //
  13. //  @objc
  14. //  override static func requiresMainQueueSetup() -> Bool {
  15. //    return true
  16. //  }
  17. //
  18. //}
  19.  
  20. @objc(CodeScannerViewManager)
  21. class CodeScannerViewManager: RCTViewManager {
  22.  
  23.   var captureSession = AVCaptureSession()
  24.   var videoPreviewLayer: AVCaptureVideoPreviewLayer?
  25.  
  26.   @objc
  27.   override func view() -> UIView! {
  28.    
  29.     print("view")
  30.    
  31.     let discoverySession = AVCaptureDevice.DiscoverySession(deviceTypes: [.builtInDualCamera], mediaType: .video, position: .back)
  32.    
  33.     guard let captureDevice = discoverySession.devices.first else {
  34.       print("No device found")
  35.       return UIView()
  36.     }
  37.    
  38.     do {
  39.       let input = try AVCaptureDeviceInput(device: captureDevice)
  40.       captureSession.addInput(input)
  41.      
  42.       let videoMetaDataOutput = AVCaptureMetadataOutput()
  43.       captureSession.addOutput(videoMetaDataOutput)
  44.      
  45.       videoMetaDataOutput.setMetadataObjectsDelegate(self, queue: DispatchQueue.main)
  46.      
  47.       videoMetaDataOutput.metadataObjectTypes = [.qr]
  48.      
  49.       videoPreviewLayer = AVCaptureVideoPreviewLayer(session: captureSession)
  50.       videoPreviewLayer?.videoGravity = .resizeAspectFill
  51.  
  52.       let view = UIView()
  53.       view.layer.addSublayer(videoPreviewLayer!)
  54.      
  55.       DispatchQueue.global(qos: .userInitiated).async {
  56.         self.captureSession.startRunning()
  57.       }
  58.      
  59.       return view
  60.      
  61.     } catch {
  62.       print(error)
  63.       return UIView()
  64.     }
  65.    
  66.   }
  67.  
  68.   @objc
  69.   override static func requiresMainQueueSetup() -> Bool {
  70.     return true
  71.   }
  72.  
  73. }
  74.  
  75. extension CodeScannerViewManager: AVCaptureMetadataOutputObjectsDelegate {
  76.   func metadataOutput(_ output: AVCaptureMetadataOutput, didOutput metadataObjects: [AVMetadataObject], from connection: AVCaptureConnection) {
  77.     if let metadataObject = metadataObjects.first {
  78.       guard let readableObject = metadataObject as? AVMetadataMachineReadableCodeObject else { return }
  79.       guard let stringValue = readableObject.stringValue else { return }
  80.       AudioServicesPlaySystemSound(SystemSoundID(kSystemSoundID_Vibrate))
  81.       CodeScannerEvents.emitter.send(code: stringValue)
  82.     }
  83.   }
  84. }
  85.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement