首页 > 解决方案 > 如何在 iOS、Swift 的 Collection View Cell 中停止捕获会话

问题描述

我在 iOS 中使用 (AVFoundation) AVCapture Session 实现了一个 QR 阅读器。在我的ParentViewController 中,我实现了一个CollectionView。在集合视图单元格内,我实现了QR 码阅读器,并开始捕获会话,开始在单元格内运行。它工作正常并读取元数据输出。当元数据输出代表调用时,我停止会话。但是如果我离开 ParentView 控制器,捕获会话仍在运行,当我导航到另一个 ViewController 时,它会从后台捕获会话。为什么会这样以及如何在导航到另一个视图控制器时停止捕获会话。

这是层次结构,

ParentViewController --->(inside)CollectionView --->(inside) CollectionViewCell --->(inside) QR Reader with capture session Strat.

怎么了,

ParentViewController ----> (navigate to another controller) Capture Session Still Activated and reads qr codes from background 

我想要的是,

ParentViewController ---->(navigate to another controller) Shouldn't capture anything.

我试过在 ParentViewController 里面 viewWillDisappear

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

         let qrreaderCell = QRReaderCell()
         qrreaderCell.captureSession.stopRunning()
         ColletionView.reloadItems(at: [IndexPath(row: 0, section: 0)])
        }

但没有工作并且失败了。有人能帮忙吗。

标签: iosswiftavfoundationavcapturesession

解决方案


您正在创建 的新实例QRReaderCell

let qrreaderCell = QRReaderCell()
qrreaderCell.captureSession.stopRunning()

无需创建新实例,只需访问包含 QRReader 的当前单元格。

let qrreaderCell = collectionView.cellForItem(at: IndexPath(row: 0, section: 0))
qrreaderCell.captureSession.stopRunning()

并确保你viewWillDisappear被叫到。如果没有,您可以在导航到另一个视图控制器之前立即停止捕获会话。只需在您推送或继续到另一个视图控制器之前停止捕获会话。


推荐阅读