AVCaptureVideoPreviewLayer没有填满全屏

Had*_*ier 5 ios swift

我正在尝试像摄像机视图一样做一个像摄像机视图,相机流填充所有屏幕.

这是代码:

func beginSession() {
    var err : NSError? = nil

    // try to open the device
    let videoCapture = AVCaptureDeviceInput(device: captureDevice, error: &err)

    if err != nil {
        // Fail silently.  Do better in the real world.
        println("Capture session could not start: \(err?.description)")
        return
    }

    // add video input
    if captureSession.canAddInput(videoCapture) {
        captureSession.addInput(videoCapture)
    }

    // config capture session
    if !captureSession.running {
        // set JPEG output
        stillImageOutput = AVCaptureStillImageOutput()
        let outputSettings = [ AVVideoCodecKey : AVVideoCodecJPEG ]
        stillImageOutput!.outputSettings = outputSettings

        // add output to session
        if captureSession.canAddOutput(stillImageOutput) {
            captureSession.addOutput(stillImageOutput)
        }

        // display camera in UI
        let bounds = cameraView.bounds
        previewLayer = AVCaptureVideoPreviewLayer(session: captureSession)
        previewLayer?.videoGravity = AVLayerVideoGravityResizeAspectFill
        previewLayer?.frame = CGRectMake(CGRectGetMinX(bounds), CGRectGetMinY(bounds), cameraView.frame.width, cameraView.frame.height)
        cameraView.layer.addSublayer(previewLayer)

        println(cameraView.frame.height)
        println(previewLayer?.frame.height)
        // start camera
        captureSession.startRunning()
    }
}
Run Code Online (Sandbox Code Playgroud)

我调用开始会话viewDidAppear以确保应用所有视图设置并且我设置必要的约束cameraView以确保它填满屏幕.

当我检查我的日志时,我可以看到它previewLayercameraView具有相同的尺寸和位置.

以下是它的呈现方式:

在此输入图像描述

这是被控制的视图控制器:

小智 10

似乎在添加预览图层框架时未设置cameraView框架.

请尝试在viewDidLayoutSubviews()函数中更新预览图层框架