我正在尝试做一个像摄像机 View 这样的工作,使摄像机流充满整个屏幕。

这是代码:

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以确保应用了所有 View 设置,并在cameraView上设置了必要的约束以确保其填充屏幕。

查看日志时,可以看到previewLayercameraView具有相同的尺寸和位置。

这是它的渲染方式:

这是incriminated view controller:

最佳答案

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

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

关于ios - AVCaptureVideoPreviewLayer未填满全屏,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31264541/

10-10 20:35