Как остановить сеанс захвата, когда он находится внутри ячейки просмотра коллекции в iOS, Swift - PullRequest
0 голосов
/ 28 марта 2019

Я реализовал QR-ридер, используя (AVFoundation) AVCapture Session в iOS.В моем ParentViewController я реализовал CollectionView .внутри ячейки представления коллекции Я реализовал QR Code Reader , и я запускаю сеанс захвата, запускающийся внутри ячейки.он отлично работает и читает вывод метаданных.Я прекращаю сеанс при вызове делегатов вывода метаданных.Но если я оставляю ParentView Controller, сеанс Capture все еще работает, и когда я перехожу к другому 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, внутренний видWillDisappear

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

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

но не сработало и не получилось.Может ли кто-нибудь помочь с этим.

Ответы [ 2 ]

2 голосов
/ 28 марта 2019

Вы создаете новый экземпляр QRReaderCell.

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

Вместо создания нового экземпляра просто зайдите в текущую ячейку, которая содержит QRReader.

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

И убедитесь, что вам позвонили viewWillDisappear. и если нет, вы можете остановить сеанс захвата непосредственно перед переходом к другому viewController. просто остановите сеанс захвата прямо перед тем, как нажать или перейти к другому viewController.

0 голосов
/ 28 марта 2019

Кажется более вероятным, что есть цикл сохранения, но трудно сказать, не видя код конфигурации вашей ячейки.

Чтобы остановить существующие сеансы, вы должны выполнить итерацию представления коллекции и остановить сеанс в любых уже существующих ячейках.Вы можете сделать это в viewDidDisappear (ваш подход создал новую ячейку, которая в любом случае будет освобождена в конце метода)

Если вы публикуете класс ячейки и код класса контроллера, возможно, это может быть полезно.

...