不能把这一个出来.
当应用程序处于活动状态时,一切都可以正常运行,而有时当我将应用程序移动到背景(按住主页按钮)而不是返回时,预览屏幕冻结/卡住.
我使用viewWillAppear和viewDidAppear进行设置.
这是我如何设置一切:
当应用程序处于活动状态时,一切都可以正常运行,而有时当我将应用程序移动到背景(按住主页按钮)而不是返回时,预览屏幕冻结/卡住.
我使用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调用该方法.
法案
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。