首页 > 解决方案 > 相机预览层不显示 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 上?

标签: iosswiftavfoundationswift4

解决方案


您可以尝试添加以下内容

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


推荐阅读