AVCaptureVideoPreviewLayer(相机预览)移动到背景和背后冻结/卡住 [英] AVCaptureVideoPreviewLayer (camera preview) freezes/stuck after moving to background and back
问题描述
不能想象这一个。
当应用程序处于活动状态时,一切正常,并且当我将应用程序移动到背景(按下主页按钮)时,有时,而不是返回,预览图层会冻结/卡住。
Im使用viewWillAppear和viewDidAppear进行设置。
这是我如何设置一切:
Cant figure this one out. Everything works fine when the app is active, and than sometimes when i move the app to the background(pressing the home button) and than going back, the previewlayer freezes/stuck. Im using viewWillAppear and viewDidAppear for the set up. This is how i set everything up :
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:
ViewDidAppear :
var previewLayer: AVCaptureVideoPreviewLayer?
override func viewDidAppear(animated: Bool) {
super.viewDidAppear(animated)
previewLayer!.frame = camera_Preview.bounds
}
推荐答案
对于未来的读者:这是设置相机的正确过程
For future readers: this is the correct process to setting up camera inside your app.
首先,感谢上面的人花了他们的时间,并尝试帮助我。他们都指引我走向正确的方向。虽然比尔误认为 viewDidLoad
的理论,他给了解决方案苹果计划。
First of all, thanks for the folks above that took their time and tried help me. They both direct me into the correct direction. Although Bill was mistaken about the viewDidLoad
theory, he did gave the solution Apple Project.
这个设置相机 - 正确的方式 - 比我想象的更复杂,按照文档给我优秀的结果。所以对于Objective-C编码器:
This setting up camera - the correct way - is little more complicated than I thought, follow the documentation gave me excellent results. So for the Objective-C coders:
关于Andrea的回答,他说过一些当你创建这种应用程序时,你应该考虑的伟大指针。检查出来 - 他们是高度相关的(他在苹果项目中说的大部分内容)。
About Andrea answer, he did said some great pointers you should consider when you are creating this kind of app. Check them out - they are highly relevant (most of the things he said inside the Apple project as well).
这篇关于AVCaptureVideoPreviewLayer(相机预览)移动到背景和背后冻结/卡住的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!