我正在尝试像摄像机一样进行观察,相机流填满整个屏幕。
以下是代码:
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
上设置必要的约束以确保它填满屏幕。
当我查看我的日志时,我发现previewLayer
和cameraView
具有相同的尺寸和位置。
以下是它的呈现方式:
答案 0 :(得分:8)
似乎在添加预览图层框架时未设置cameraView框架。
尝试更新viewDidLayoutSubviews()函数
中的预览图层框架