Я представляю новый контроллер вида (cameraVC) при нажатии кнопки камеры. У cameraVC есть AVCaptureSession, который берет фотографии и видео, а также использует микрофон и отображает все это на AVCacptureVideoPreviewLayer. Все это прекрасно работает. Но когда я увольняю cameraVC с помощью функции dismiss (), я не уверен, как правильно очистить все остальное, чтобы cameraVC и его компоненты полностью выделялись / освобождались. Когда я снова нажимаю на кнопку камеры, тот же сеанс захвата все еще продолжается. Фактически, если я начал записывать видео до того, как нажал кнопку отклонения, камера продолжит запись даже тогда, когда камера больше не отображается. Я хотел бы полностью отключить cameraVC при нажатии кнопки dismiss, включая остановку и отмену выделения этого сеанса захвата и слоя предварительного просмотра.
Я пробовал, до вызова dismiss (), session.stopRunning ()и self.previewLayer.removeFromSuperLayer (). Это работает в том смысле, что они это делают, но фактический VC-камера не отменяет выделение, поэтому, когда я снова нажимаю на кнопку камеры, функции, вызываемые из viewDidLoad (), которые создают экземпляр сеанса и слоя предварительного просмотра, больше не вызываются. Я понимаю, что могу вызывать те же функции в viewWillAppear (), но разве не лучше, чтобы эти вещи не работали постоянно в фоновом режиме после первого нажатия кнопки камеры? Или же рекомендуется просто приостановить сеанс камеры в фоновом режиме после его вызова?
Еще: Когда я вызываю dismiss () для cameraVC, viewWillDisappear () вызывается, а deinit () - нет. Может ли кто-нибудь помочь объяснить, как заставить это работать, и / или каковы механизмы этого? Большое спасибо.