gpt4 book ai didi

ios - 使用 IOS 相机预览层填充 View

转载 作者:可可西里 更新时间:2023-11-01 00:00:27 25 4
gpt4 key购买 nike

学习教程,我正在尝试进行全屏预览。目前,我的相机看起来很正方形,我相当有信心这可能是一个宽高比问题。相机似乎击中了左右边界。如何将预览固定到导航栏底部和屏幕底部以及两侧?

import UIKit
import AVFoundation

class HomeViewController: UIViewController, AVCaptureVideoDataOutputSampleBufferDelegate {

let captureSession = AVCaptureSession()
var previewLayer:CALayer!

var captureDevice:AVCaptureDevice!

override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
prepareCamera()
}

func prepareCamera(){
captureSession.sessionPreset = AVCaptureSessionPresetPhoto

if let availableDevices = AVCaptureDeviceDiscoverySession(deviceTypes: [.builtInWideAngleCamera], mediaType: AVMediaTypeVideo, position: .back).devices {
captureDevice = availableDevices.first
beginSession()
}
}

func beginSession () {
do {
let captureDeviceInput = try AVCaptureDeviceInput(device: captureDevice)
captureSession.addInput(captureDeviceInput)
} catch {
print(error.localizedDescription)
}

if let previewLayer = AVCaptureVideoPreviewLayer(session: captureSession) {
self.previewLayer = previewLayer
self.view.layer.addSublayer(self.previewLayer)
self.previewLayer.frame = self.view.layer.frame
//ADD CONSTRAINTS HERE

captureSession.startRunning()

let dataOutput = AVCaptureVideoDataOutput()
dataOutput.videoSettings = [(kCVPixelBufferPixelFormatTypeKey as NSString):NSNumber(value:kCVPixelFormatType_32BGRA)]

dataOutput.alwaysDiscardsLateVideoFrames = true

if captureSession.canAddOutput(dataOutput) {
captureSession.addOutput(dataOutput)
}

captureSession.commitConfiguration()

// let queue = DispatchQueue(label: com.willkie.captureQueue)
// dataOutput.setSampleBufferDelegate(self, queue: queue)
}
}

func captureOutput(_ captureOutput: AVCaptureOutput!, didDrop sampleBuffer: CMSampleBuffer!, from connection: AVCaptureConnection!) {

}

override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}


}

why???

最佳答案

我认为可能改变你的这个特定行应该有效 -

self.previewLayer.frame = self.view.layer.frame 

self.previewLayer.frame = self.view.layer.bounds

此外,只有在上面的代码中调整了框架后,您才应该添加子图层。现在你之前已经添加了。

self.view.layer.addSublayer(self.previewLayer)

还需要加上引力

previewLayer.videoGravity = AVLayerVideoGravityResizeAspectFill

如果它仍然不起作用,请将自定义 View 添加到您的 View Controller 并将其设置为您想要显示相机预览的大小,然后您可以使用它 -

self.previewLayer.frame = self.customViewOutlet.layer.bounds

关于ios - 使用 IOS 相机预览层填充 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45092721/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com