2017-11-30 5 views
1

QRcode로 앱을 만들고 있는데 바코드 스캐너를 사용하는 이전 코드가 있습니다. QRcode 스캐너로도 수정할 수 있습니까?바코드 스캐너를 QRcode 스캐너로 사용할 수 있습니까?

감사

+0

예, 그렇게 할 수 있습니다. CIDetector * detector = [CIDetector detectorOfType : CIDetectorTypeQRCode 컨텍스트 : 없음 옵션 : @ {CIDetectorAccuracy : CIDetectorAccuracyHigh}]; – Shekhu

+0

현재 사용중인 바코드 스캐너에 대한 자세한 내용을 제공해야합니다. iOS의 여러 구현을 비롯하여 외부 라이브러리로 더 많이 포함됩니다. – jcaron

+0

Apple에서 제공 한 기본 감지기 코드를 사용하고 있습니다. –

답변

1
CIdetector type: CIDetector* detector = [CIDetector detectorOfType:CIDetectorTypeQRCode context:nil options:@{CIDetectorAccuracy:CIDetectorAccuracyHigh}]; 

변경 CIDetectorTypeQRCode에 CIdetector 유형입니다.

+0

감사! 이것이 내가 필요한 것입니다. –

+0

이것과 별개로 다른 방법이 있습니까? –

+0

좋아요 CIDetector를 사용하지 않으시겠습니까? –

0

let supportedCodeTypes = [AVMetadataObjectTypeUPCECode, 
           AVMetadataObjectTypeCode39Code, 
           AVMetadataObjectTypeCode39Mod43Code, 
           AVMetadataObjectTypeCode93Code, 
           AVMetadataObjectTypeCode128Code, 
           AVMetadataObjectTypeEAN8Code, 
           AVMetadataObjectTypeEAN13Code, 
           AVMetadataObjectTypeAztecCode, 
           AVMetadataObjectTypePDF417Code, 
           AVMetadataObjectTypeQRCode] 

은 다음 viewWillAppear

func startVideoCapture(){ 
     // Get an instance of the AVCaptureDevice class to initialize a device object and provide the video as the media type parameter. 
     let captureDevice = AVCaptureDevice.defaultDevice(withMediaType: AVMediaTypeVideo) 

     do { 
      // Get an instance of the AVCaptureDeviceInput class using the previous device object. 
      let input = try AVCaptureDeviceInput(device: captureDevice) 

      // Initialize the captureSession object. 
      captureSession = AVCaptureSession() 

      // Set the input device on the capture session. 
      captureSession?.addInput(input) 

      // Initialize a AVCaptureMetadataOutput object and set it as the output device to the capture session. 
      let captureMetadataOutput = AVCaptureMetadataOutput() 
      captureSession?.addOutput(captureMetadataOutput) 

      // Set delegate and use the default dispatch queue to execute the call back 
      captureMetadataOutput.setMetadataObjectsDelegate(self, queue: DispatchQueue.main) 
      captureMetadataOutput.metadataObjectTypes = supportedCodeTypes 

      // Initialize the video preview layer and add it as a sublayer to the viewPreview view's layer. 
      videoPreviewLayer = AVCaptureVideoPreviewLayer(session: captureSession) 
      videoPreviewLayer?.videoGravity = AVLayerVideoGravityResizeAspectFill 
      videoPreviewLayer?.frame = self.qrCodeView.bounds 
      self.qrCodeView.layer.addSublayer(videoPreviewLayer!) 
      self.qrCodeView.clipsToBounds = true 
      // Start video capture. 
      captureSession?.startRunning() 
      qrCodeFrameView = UIView() 

//   if let qrCodeFrameView = qrCodeFrameView { 
//    qrCodeFrameView.layer.borderColor = UIColor.green.cgColor 
//    qrCodeFrameView.layer.borderWidth = 2 
//    self.qrCodeView.addSubview(qrCodeFrameView) 
//    self.qrCodeView.bringSubview(toFront: qrCodeFrameView) 
//   } 

     } catch { 
      // If any error occurs, simply print it out and don't continue any more. 
      print(error) 
      return 
     } 
    } 

다음의 ViewController에이 기능을 추가 바코드를 스캔하고 당신이 당신의 뷰 컨트롤러에이 추가 코드 아래

을 사용할 수 있습니다 QRCODE하려면

override func viewWillAppear(_ animated: Bool) { 
     super.viewWillAppear(true) 
     self.startVideoCapture() 
} 

전화를 걸기 전에 카메라 사용 권한을 확인하는 것을 잊지 마십시오. startVideoCapture

+0

도움을 주셔서 감사합니다. –

+0

당신은 환영합니다 –