0

내 바코드 스캐너보기에 내비게이션 막대를 추가하고 싶습니다. 이 방법으로 바코드 스캐너 (모달)보기를 닫을 수 있지만 탐색 막대가 없기 때문에 무언가가 작동하지 않습니다. 스캐너보기의 탐색 모음 - IOS - Swift

var captureSession: AVCaptureSession! 
    var previewLayer: AVCaptureVideoPreviewLayer! 


    override func viewDidLoad() { 
     super.viewDidLoad() 

     setupNavBar() 
     view.backgroundColor = UIColor.black 
     captureSession = AVCaptureSession() 

     let videoCaptureDevice = AVCaptureDevice.defaultDevice(withMediaType: AVMediaTypeVideo) 
     let videoInput: AVCaptureDeviceInput 

     do { 
      videoInput = try AVCaptureDeviceInput(device: videoCaptureDevice) 
     } catch { 
      return 
     } 

     if (captureSession.canAddInput(videoInput)) { 
      captureSession.addInput(videoInput) 
     } else { 
      failed(); 
      return; 
     } 

     let metadataOutput = AVCaptureMetadataOutput() 

     if (captureSession.canAddOutput(metadataOutput)) { 
      captureSession.addOutput(metadataOutput) 

      metadataOutput.setMetadataObjectsDelegate(self, queue: DispatchQueue.main) 
      metadataOutput.metadataObjectTypes = [AVMetadataObjectTypeEAN8Code, AVMetadataObjectTypeEAN13Code, AVMetadataObjectTypePDF417Code] 
     } else { 
      failed() 
      return 
     } 

     previewLayer = AVCaptureVideoPreviewLayer(session: captureSession); 
     previewLayer.frame = view.layer.bounds; 
     previewLayer.videoGravity = AVLayerVideoGravityResizeAspectFill; 
     view.layer.addSublayer(previewLayer); 



     captureSession.startRunning(); 
    } 

    func failed() { 
     let ac = UIAlertController(title: "Scanning not supported", message: "Your device does not support scanning a code from an item. Please use a device with a camera.", preferredStyle: .alert) 
     ac.addAction(UIAlertAction(title: "OK", style: .default)) 
     present(ac, animated: true) 
     captureSession = nil 
    } 

    override func viewWillAppear(_ animated: Bool) { 
     super.viewWillAppear(animated) 

     if (captureSession?.isRunning == false) { 
      captureSession.startRunning(); 
     } 
    } 

    override func viewWillDisappear(_ animated: Bool) { 
     super.viewWillDisappear(animated) 

     if (captureSession?.isRunning == true) { 
      captureSession.stopRunning(); 
     } 
    } 

    func captureOutput(_ captureOutput: AVCaptureOutput!, didOutputMetadataObjects metadataObjects: [Any]!, from connection: AVCaptureConnection!) { 
     captureSession.stopRunning() 

     if let metadataObject = metadataObjects.first { 
      let readableObject = metadataObject as! AVMetadataMachineReadableCodeObject; 

      AudioServicesPlaySystemSound(SystemSoundID(kSystemSoundID_Vibrate)) 
      found(code: readableObject.stringValue); 

      self.isbn = readableObject.stringValue 
      self.performSegue(withIdentifier: "scanToSell", sender: nil) 
     } 

    } 

    func found(code: String) { 
     print(code) 
    } 

    override var prefersStatusBarHidden: Bool { 
     return true 
    } 

    override var supportedInterfaceOrientations: UIInterfaceOrientationMask { 
     return .portrait 
    } 

사전에 감사 :이 아래

let navBar: UINavigationBar = { 
     let bar = UINavigationBar() 
     bar.translatesAutoresizingMaskIntoConstraints = false 
     return bar 
    }() 

    func setupNavBar(){ 

     view.addSubview(navBar) 
     view.bringSubview(toFront: navBar) 

     navBar.heightAnchor.constraint(equalTo: view.heightAnchor, multiplier: 0.09).isActive = true 
     navBar.widthAnchor.constraint(equalTo: view.widthAnchor).isActive = true 
     navBar.leftAnchor.constraint(equalTo: view.leftAnchor).isActive = true 
     navBar.rightAnchor.constraint(equalTo: view.rightAnchor).isActive = true 
     navBar.topAnchor.constraint(equalTo: view.topAnchor).isActive = true 

     let doneItem = UIBarButtonItem(title:"Cancel",style: .done, target: nil, action: #selector(doneButton)); 
     let navItem = UINavigationItem(title: "Scanner"); 
     navItem.rightBarButtonItem = doneItem; 
     navBar.setItems([navItem], animated: false); 

    } 


func doneButton(){ 

    let presentingViewController: UIViewController! = self.presentingViewController 
    presentingViewController.presentingViewController!.dismiss(animated: true, completion: nil) 

} 

스캐너에 대한 내 코드입니다 :

이러한 내 setupNavBar 방법과 내 내비게이션 바 설정에 내 네비게이션 바있다. 좋은 직장

답변

0

내 오류를 발견했습니다. 내 viewDidLoad 메서드에서 setupNavBar이 방식으로 위치를 변경해야합니다.

override func viewDidLoad() { 
    super.viewDidLoad() 

    // setupNavBar() No 
    view.backgroundColor = UIColor.black 
    captureSession = AVCaptureSession() 

    let videoCaptureDevice = AVCaptureDevice.defaultDevice(withMediaType: AVMediaTypeVideo) 
    let videoInput: AVCaptureDeviceInput 

     do { 
      videoInput = try AVCaptureDeviceInput(device: videoCaptureDevice) 
     } catch { 
      return 
     } 

     if (captureSession.canAddInput(videoInput)) { 
      captureSession.addInput(videoInput) 
     } else { 
      failed(); 
      return; 
     } 

     let metadataOutput = AVCaptureMetadataOutput() 

     if (captureSession.canAddOutput(metadataOutput)) { 
      captureSession.addOutput(metadataOutput) 

      metadataOutput.setMetadataObjectsDelegate(self, queue: DispatchQueue.main) 
      metadataOutput.metadataObjectTypes = [AVMetadataObjectTypeEAN8Code, AVMetadataObjectTypeEAN13Code, AVMetadataObjectTypePDF417Code] 
     } else { 
      failed() 
      return 
     } 

     previewLayer = AVCaptureVideoPreviewLayer(session: captureSession); 
     previewLayer.frame = view.layer.bounds; 
     previewLayer.videoGravity = AVLayerVideoGravityResizeAspectFill; 
     view.layer.addSublayer(previewLayer); 

    setupNavBar() // Yes 

     captureSession.startRunning(); 
    } 
1

나는 며칠 전에 같은 문제에 직면했다. 나는 scannerviewcontroller을 만들었습니다. 확인 : https://gist.github.com/Raghvendra7/ff6335c47bbca04fb88d1cb76917d2e5, 취소 문제가 해결되었습니다. 도움이되기를 바랍니다. 이 컨트롤러에서 스캐너 효과 작업 중이며 완료되면 업데이트됩니다.

+0

답장을 보내 주셔서 감사합니다.하지만 오류를 발견했습니다. – Carlo