我的主视图控制器是一个摄像机视图,如果我执行 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()
}