Слой предварительного просмотра камеры не отображается Swift 4 - PullRequest
0 голосов
/ 12 мая 2018

Я создаю ViewController, в котором я хочу иметь несколько маленький UIView в углу ViewController для отображения предварительного просмотра камеры. Я использую функцию, чтобы сделать это. Однако, когда я передаю небольшой 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 голосов
/ 12 мая 2018

Можете ли вы попробовать добавить следующее

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

...