我正在尝试做一个像摄像机 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
上设置了必要的约束以确保其填充屏幕。查看日志时,可以看到
previewLayer
和cameraView
具有相同的尺寸和位置。这是它的渲染方式:
这是incriminated view controller:
最佳答案
似乎在添加预览图层框架时未设置cameraView框架。
请尝试在viewDidLayoutSubviews()函数中更新预览图层框架
关于ios - AVCaptureVideoPreviewLayer未填满全屏,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31264541/