相机预览图层不显示Swift 4

Camera preview layer does not show up Swift 4

我正在创建一个 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 上?

你可以尝试添加以下内容吗

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