关闭视图控制器会导致相机延迟



我的主视图控制器是一个摄像机视图,如果我执行 segue 转到另一个屏幕,在我关闭它之后,相机视图的最后一个"帧"会显示半秒钟,然后显示当前摄像机"视图"。 我是否需要以其他方式呈现第二个视图?

调用初始 segue:

floatyButton.addItem("About", icon: UIImage.init(named: "aboutIcon")) {(item) in
self.performSegue(withIdentifier: "aboutPage", sender: Any?.self)
}

在第二个视图的关闭按钮上,我只使用:

dismiss(animated: true, completion: nil)

我猜在某种程度上,我需要在第二个ViewController消失之前开始加载第一个ViewController,但不确定如何?

这是视频捕获: https://www.dropbox.com/s/pv3nypr7rnufhxc/IMG_0565.TRIM.mov?dl=0

提前感谢!

如果您检查本机相机应用,则会看到类似的行为。尝试点击左下角的照片按钮以显示您的相册,然后点击后退按钮。您将看到Apple暂时在相机层上显示视觉模糊,因此您看不到最后捕获的帧。

在第一个视图控制器的视图从屏幕上删除之前,您需要对AVVideoCapturePreviewLayer进行某种操作 - 例如,苹果方式看起来像是拍摄视图的快照,在其上放置模糊,然后在预览层准备就绪后删除模糊再次呈现。

将 performSegue 放在完成中,如下所示:

dismiss(animated: true, completion: {
performSegue(withIdentifier: "mySegueID", sender: nil)
})

我认为问题不在于 segue 或解雇,而在于您的主要...你能展示你的主要生命周期方法吗?

只需隐藏带相机的视图预览并停止相机。
但不要忘记恢复它。

/*
`cameraPreview` is the View where Camera preview is showing
`camera` is type of my own class for managing iOS Camera
*/
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)

cameraPreview.isHidden = true
camera?.stopRunning()
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)

cameraPreview.isHidden = false
camera?.startRunning()
}

最新更新