相机预览图层不显示Swift 4

时间:2018-05-12 14:40:14

标签: ios swift avfoundation swift4

我正在创建一个ViewController,我希望在ViewController的一角有一个小的UIView来显示相机预览。我正在使用一个函数来执行此操作。然而,当我将小UIView传入该功能时,相机预览没有显示出来。奇怪的是,如果我告诉函数在self.view上显示预览,一切正常,我可以看到相机预览。出于这个原因,我认为问题在于我插入图层或类似的方式。

这是我用来显示预览的功能......

   func displayPreview(on view: UIView) throws {
        guard let captureSession = self.captureSession, captureSession.isRunning else { throw CameraControllerError.captureSessionIsMissing }

        self.previewLayer = AVCaptureVideoPreviewLayer(session: captureSession)
        self.previewLayer?.videoGravity = AVLayerVideoGravity.resizeAspectFill
        self.previewLayer?.connection?.videoOrientation = .portrait

        view.layer.insertSublayer(self.previewLayer!, at: 0)

        self.previewLayer?.frame = view.frame


    }

我从另一个处理设置捕获会话和其他类似事情的函数内部调用此函数。

    func configureCameraController() {
        cameraController.prepare {(error) in
            if let error = error {
                print("ERROR")
                print(error)
            }else{

            }
            print("hello")
            try! self.cameraController.displayPreview(on: self.mirrorView)
        }
    }

    configureCameraController()

如何让相机预览图层显示在较小的UIView上?

1 个答案:

答案 0 :(得分:2)

您可以尝试添加以下内容

let rootLayer: CALayer = self.yourSmallerView.layer
rootLayer.masksToBounds = true
self.previewLayer.frame = rootLayer.bounds
rootLayer.addSublayer(self.previewLayer)

取代

view.layer.insertSublayer(self.previewLayer!, at: 0)

同时确保yourSmallerView.contentMode = UIViewContentMode.scaleToFill