Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import Foundation
- import AVFoundation
- //@objc(CodeScannerViewManager)
- //class CodeScannerViewManager: RCTViewManager {
- //
- // @objc
- // override func view() -> UIView! {
- // let captureView = CodeScannerViewController()
- // return captureView.view
- // }
- //
- // @objc
- // override static func requiresMainQueueSetup() -> Bool {
- // return true
- // }
- //
- //}
- @objc(CodeScannerViewManager)
- class CodeScannerViewManager: RCTViewManager {
- var captureSession = AVCaptureSession()
- var videoPreviewLayer: AVCaptureVideoPreviewLayer?
- @objc
- override func view() -> UIView! {
- print("view")
- let discoverySession = AVCaptureDevice.DiscoverySession(deviceTypes: [.builtInDualCamera], mediaType: .video, position: .back)
- guard let captureDevice = discoverySession.devices.first else {
- print("No device found")
- return UIView()
- }
- do {
- let input = try AVCaptureDeviceInput(device: captureDevice)
- captureSession.addInput(input)
- let videoMetaDataOutput = AVCaptureMetadataOutput()
- captureSession.addOutput(videoMetaDataOutput)
- videoMetaDataOutput.setMetadataObjectsDelegate(self, queue: DispatchQueue.main)
- videoMetaDataOutput.metadataObjectTypes = [.qr]
- videoPreviewLayer = AVCaptureVideoPreviewLayer(session: captureSession)
- videoPreviewLayer?.videoGravity = .resizeAspectFill
- let view = UIView()
- view.layer.addSublayer(videoPreviewLayer!)
- DispatchQueue.global(qos: .userInitiated).async {
- self.captureSession.startRunning()
- }
- return view
- } catch {
- print(error)
- return UIView()
- }
- }
- @objc
- override static func requiresMainQueueSetup() -> Bool {
- return true
- }
- }
- extension CodeScannerViewManager: AVCaptureMetadataOutputObjectsDelegate {
- func metadataOutput(_ output: AVCaptureMetadataOutput, didOutput metadataObjects: [AVMetadataObject], from connection: AVCaptureConnection) {
- if let metadataObject = metadataObjects.first {
- guard let readableObject = metadataObject as? AVMetadataMachineReadableCodeObject else { return }
- guard let stringValue = readableObject.stringValue else { return }
- AudioServicesPlaySystemSound(SystemSoundID(kSystemSoundID_Vibrate))
- CodeScannerEvents.emitter.send(code: stringValue)
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement