【发布时间】:2020-02-03 05:54:47
【问题描述】:
当点击相机按钮时,我将展示一个新的视图控制器 (cameraVC)。 cameraVC 有一个 AVCaptureSession,它可以拍摄照片和视频,并使用麦克风并将其全部显示在 AVCacptureVideoPreviewLayer 上。所有这些都很好。但是当我使用dismiss() 函数关闭cameraVC 时,我不确定如何正确清理其余部分,以便cameraVC 及其组件完全解除分配/释放。当我再次点击相机按钮时,相同的捕获会话仍在运行。事实上,如果我在按下关闭按钮之前开始录制视频,即使 cameraVC 不再显示,相机也会继续录制。我想在点击关闭按钮时完全关闭 cameraVC,包括停止和取消分配该捕获会话和预览层。
在调用dismiss()、session.stopRunning() 和self.previewLayer.removeFromSuperLayer() 之前,我已经尝试过了。从某种意义上说,他们这样做是有效的,但实际的 cameraVC 并没有取消分配,所以当我再次点击相机按钮时,从 viewDidLoad() 中调用的用于实例化会话和预览层的函数不再被调用。我意识到我可以在 viewWillAppear() 中调用这些相同的函数,但是一旦第一次点击相机按钮,不让这些东西在后台持续运行不是更好的做法吗?或者是否建议在调用后仅在后台进行暂停的摄像头会话?
更多:当我在cameraVC 上调用dismiss() 时,viewWillDisappear() 被调用,尽管deinit() 不是。有人可以帮助解释如何进行这项工作,和/或这背后的机制是什么?非常感谢。
【问题讨论】:
标签: ios swift avcapturesession dismiss