yeahdongcn / RSBarcodes_Swift

1D and 2D barcodes reader and generators for iOS 8 with delightful controls. Now Swift.
MIT License
708 stars 185 forks source link

self.barcodesHandler = {}执行了N次 #16

Closed l12ab closed 9 years ago

l12ab commented 9 years ago

我发现self.barcodesHandler = {barcodes in } 会执行N次,扫的码有多长就执行多少次,每次barcodes除了坐标不一样,条码的值都一样。

我想当扫码成功后,立即返回一个结果,也就是上述代码只执行一次最好,求指点该如何弄?

yeahdongcn commented 9 years ago

这个你可以自己控制,因为每个人的需求不一样。比如说比如说用一个bool值标识是否已经正在处理,如果处理中所有新进来的bardcode就不再继续处理;或者收到了之后直接self.session.stopRunning()把当前的session停掉。

self.barcodesHandler = { [unowned self] barcodes in

    if self.isReadyForUpload {
        return
    }

    let barcode = barcodes.first
    if barcode == nil {
        return
    } else {
        self.isReadyForUpload = true

        self.type = barcode!.type
        self.value = barcode!.stringValue

        dispatch_async(dispatch_get_main_queue(), { () -> Void in
            let alertView = UIAlertView(title: "Barcode captured",
                message: "Barcode type: " + self.type! + " value: " + self.value!,
                delegate: self,
                cancelButtonTitle: "Cancel",
                otherButtonTitles: "Upload")
            alertView.tag = 0xCAFE
            alertView.show()
        })
    }
}
l12ab commented 9 years ago

昨天我是在 public func captureOutput(captureOutput: AVCaptureOutput!, didOutputMetadataObjects metadataObjects: [AnyObject]!, fromConnection connection: AVCaptureConnection!) 方法前和里面加了个次数判断来解决的

var outputTimes = 0
 public func captureOutput(captureOutput: AVCaptureOutput!, didOutputMetadataObjects metadataObjects: [AnyObject]!, fromConnection connection: AVCaptureConnection!) {
if self.outputTimes > 0 {
return
}else{
++self.outputTimes
}

但现在还是采用你的方法,觉得你这样更好

yeahdongcn commented 9 years ago

OK, 给star一下哦

l12ab commented 9 years ago

哈哈,早就star了

broccolii commented 8 years ago

受教 已following