AVCaptureVideoPreviewLayer没有填满全屏

时间:2015-07-07 09:19:41

标签: 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()
    }
}

我在viewDidAppear中调用begin session以确保应用所有视图设置,并在cameraView上设置必要的约束以确保它填满屏幕。

当我查看我的日志时,我发现previewLayercameraView具有相同的尺寸和位置。

以下是它的呈现方式:

enter image description here

以下是incriminated view controller

1 个答案:

答案 0 :(得分:8)

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

尝试更新viewDidLayoutSubviews()函数

中的预览图层框架