我正在尝试像摄像机视图一样做一个像摄像机视图,相机流填充所有屏幕.
这是代码:
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以确保它填满屏幕.
当我检查我的日志时,我可以看到它previewLayer并cameraView具有相同的尺寸和位置.
以下是它的呈现方式:

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