QRCodereader的其他按钮不起作用(手电筒/手电筒,取消,切换摄像头)?

阿克西

我已经将示例应用程序从(https://cocoapods.org/pods/QRCodeReader.swift)实现到我自己的项目,以在显示条形码扫描仪的主屏幕上创建一个uiview。我可以扫描条形码并打印结果,但是即使在视图上显示图标,按下手电筒(手电筒)按钮也不会执行任何操作,与“取消”和“开关相机”按钮相同。可能是什么问题呢?

这是我的代码:

import UIKit
import QRCodeReader

class Plockning: UIViewController {

    lazy var reader: QRCodeReader = QRCodeReader(metadataObjectTypes: [.ean13, .upce, .code128], captureDevicePosition: .back)

    @IBOutlet weak var Uiview: QRCodeReaderView! {
        didSet {
          Uiview.setupComponents(with: QRCodeReaderViewControllerBuilder {
            $0.reader                 = reader
            $0.showTorchButton        = true // ICON SHOWS ON VIEW BUT PRESSING ON IT DOES NOTHING.
            $0.showSwitchCameraButton = true // ICON SHOWS ON VIEW BUT PRESSING ON IT DOES NOTHING.
            $0.showCancelButton       = true // ICON SHOWS ON VIEW BUT PRESSING ON IT DOES NOTHING.
            $0.showOverlayView        = true // THIS DOESN'T SHOW ON SCREEN
            $0.rectOfInterest         = CGRect(x: 0.2, y: 0.2, width: 0.6, height: 0.6)
          })
        }
      }




    override func viewDidLoad()
    {
        super.viewDidLoad()


        reader.startScanning()

        reader.didFindCode = { result in
          print("Completion with result: (result.value) of type (result.metadataType)")
        }
    }

}
唐马格

您需要更全面地检查源代码。

该行例如:

.showTorchButton = true

toggleTorchButton在界面上添加了一个“默认值” ,但是该按钮在告诉您您要执行的操作之前不会执行任何操作。

在提供的中QRCodeReaderViewController,我们找到以下行:

builder.readerView.displayable.toggleTorchButton?.addTarget(self, action: #selector(toggleTorchAction), for: .touchUpInside)

和相应的选择器:

@objc func toggleTorchAction(_ button: ToggleTorchButton) {
    codeReader.toggleTorch()
}

因此,对于您的应用程序,您将实现相同的选择器功能,并将操作添加到QRCodeReaderView已设置的操作中:

class Plockning: UIViewController {
    
    lazy var reader: QRCodeReader = QRCodeReader(metadataObjectTypes: [.ean13, .upce, .code128], captureDevicePosition: .back)
    
    @IBOutlet weak var Uiview: QRCodeReaderView! {
        didSet {
            Uiview.setupComponents(with: QRCodeReaderViewControllerBuilder {
                $0.reader                 = reader
                $0.showTorchButton        = true // ICON SHOWS ON VIEW BUT PRESSING ON IT DOES NOTHING.
                $0.showSwitchCameraButton = true // ICON SHOWS ON VIEW BUT PRESSING ON IT DOES NOTHING.
                $0.showCancelButton       = true // ICON SHOWS ON VIEW BUT PRESSING ON IT DOES NOTHING.
                $0.showOverlayView        = true // THIS DOESN'T SHOW ON SCREEN
                $0.rectOfInterest         = CGRect(x: 0.2, y: 0.2, width: 0.6, height: 0.6)
            })
        }
    }
    
    override func viewDidLoad()
    {
        super.viewDidLoad()

        // assign the touchUpInside action for the torch button
        Uiview.toggleTorchButton?.addTarget(self, action: #selector(self.toggleTorchAction(_:)), for: .touchUpInside)

        reader.startScanning()
        
        reader.didFindCode = { result in
            print("Completion with result: \(result.value) of type \(result.metadataType)")
        }
    }

    // handle the user tapping the torch button    
    @objc func toggleTorchAction(_ button: ToggleTorchButton) {
        reader.toggleTorch()
    }

}

您将要对要显示的其他“内置”按钮执行相同的操作。

顺便说一句,这Uiview是一个糟糕的名称。使用类似:

@IBOutlet weak var myScannerView: QRCodeReaderView!

或类似的东西。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章