ios – AVCaptureVideoPreviewLayer(相机预览)在移动到背景和背面后冻结卡住

ios – AVCaptureVideoPreviewLayer(相机预览)在移动到背景和背面后冻结卡住,第1张

概述不能把这一个出来. 当应用程序处于活动状态时,一切都可以正常运行,而有时当我将应用程序移动到背景(按住主页按钮)而不是返回时,预览屏幕冻结/卡住. 我使用viewWillAppear和viewDidAppear进行设置. 这是我如何设置一切: var backCamera = AVCaptureDevice.devicesWithMediaType(AVMediaTypeVideo) var 不能把这一个出来.
当应用程序处于活动状态时,一切都可以正常运行,而有时当我将应用程序移动到背景(按住主页按钮)而不是返回时,预览屏幕冻结/卡住.
我使用vIEwWillAppear和vIEwDIDAppear进行设置.
这是我如何设置一切:
var backCamera = AVCaptureDevice.devicesWithMediaType(AVMediaTypeVIDeo)  var global_device : AVCaptureDevice!  var captureSession: AVCaptureSession?overrIDe func vIEwWillAppear(animated: Bool) {super.vIEwWillAppear(animated)captureSession = AVCaptureSession()        captureSession!.sessionPreset = AVCaptureSessionPresetPhoto        Correctposition = AVCaptureDeviceposition.Back        for device in backCamera {            if device.position == AVCaptureDeviceposition.Back {                global_device = device as! AVCaptureDevice                Correctposition = AVCaptureDeviceposition.Back                break            }        }        configureCamera()        var error: NSError?        var input = AVCaptureDeviceinput(device: global_device,error: &error)        if error == nil && captureSession!.canAddinput(input) {            captureSession!.addinput(input)            stillimageOutput = AVCaptureStillimageOutput()            stillimageOutput!.outputSettings = [AVVIDeoCodecKey: AVVIDeoCodecJPEG]            if captureSession!.canAddOutput(stillimageOutput) {                captureSession!.addOutput(stillimageOutput)                prevIEwLayer = AVCaptureVIDeoPrevIEwLayer(session: captureSession)                var bounds:CGRect = camera_PrevIEw.layer.bounds                prevIEwLayer?.vIDeoGravity = AVLayerVIDeoGravityResizeAspectFill                prevIEwLayer?.bounds = bounds                prevIEwLayer?.position = CGPointMake(CGRectGetMIDX(bounds),CGRectGetMIDY(bounds))                camera_PrevIEw.layer.addSublayer(prevIEwLayer)                self.vIEw.bringSubvIEwToFront(camera_PrevIEw)                self.vIEw.bringSubvIEwToFront(nan_vIEw)                captureSession!.startRunning()            }        }

VIEwDIDAppear:

var prevIEwLayer: AVCaptureVIDeoPrevIEwLayer?overrIDe func vIEwDIDAppear(animated: Bool) {        super.vIEwDIDAppear(animated)        prevIEwLayer!.frame = camera_PrevIEw.bounds    }
解决方法 投资回报率,

我认为你的问题是你正在做所有的会话设置,在vIEwWillAppear中.让我们说,captureSession和prevIEwLayer都被分配并且正常工作.现在,你把应用程序放在后台并带回来.

您将立即尝试创建一个新的captureSession和一个新的prevIEwLayer.我怀疑旧的和新的都在纠结.

在Apple AVCam示例中,他们在vIEwDIDLoad中进行设置.这样做只能做一次.

您应该将所有设置的东西移动到一个方法,然后从vIEwDIDLoad调用该方法.

法案

总结

以上是内存溢出为你收集整理的ios – AVCaptureVideoPreviewLayer(相机预览)在移动到背景和背面后冻结/卡住全部内容,希望文章能够帮你解决ios – AVCaptureVideoPreviewLayer(相机预览)在移动到背景和背面后冻结/卡住所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/web/1111424.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-29
下一篇 2022-05-29

发表评论

登录后才能评论

评论列表(0条)

保存