ios - 如何在 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)])
}
但没有工作并且失败了。有人能帮忙吗。
解决方案
您正在创建 的新实例QRReaderCell
。
let qrreaderCell = QRReaderCell()
qrreaderCell.captureSession.stopRunning()
无需创建新实例,只需访问包含 QRReader 的当前单元格。
let qrreaderCell = collectionView.cellForItem(at: IndexPath(row: 0, section: 0))
qrreaderCell.captureSession.stopRunning()
并确保你viewWillDisappear
被叫到。如果没有,您可以在导航到另一个视图控制器之前立即停止捕获会话。只需在您推送或继续到另一个视图控制器之前停止捕获会话。
推荐阅读
- python - 当数据太大时,Pytest 失败
- java - 应用程序在添加第二个 navHostFragment 时崩溃
- sql - 如何在postgres中返回过去12个月每个月发生的所有记录的总和
- python - 使用 Popen 将 Python 变量传递给 Powershell 参数
- gitlab - Gitlab CE 容器注册表超时 - Rack::Timeout::RequestTimeoutException
- php - Laravel 分层树视图显示部门
- django - Django,如何从 django 模型的数据创建 csv 文件并将其上传到 django 中的另一个模型
- python - /resetpassword/ 处的 SMTPServerDisconnected 连接在 Django 中意外关闭
- image - 如何在颤动中创建一个屏幕,我可以在其中插入文本并以随机顺序插入图片(如 MS word)?
- sql-server - EFCore 3 的保存日期导致 System.InvalidCastException