gpt4 book ai didi

swift - AVCaptureVideoPreviewLayer 和从相机位置预览

转载 作者:行者123 更新时间:2023-12-02 14:11:08 28 4
gpt4 key购买 nike

我正在开发一个允许用户拍照的应用程序。我已经开始使用AVCam苹果提供了,但我实际上有一个问题只是我无法将相机层放置在我想要的位置,但它会自动放置在 View 的中心

enter image description here

在左侧,您可以看到我实际拥有的内容,在右侧,您可以看到我想要拥有的内容。包含来自相机的预览的 View 是 UIView 子类,这是代码

class AVPreviewView : UIView {
override class func layerClass() -> AnyClass {
return AVCaptureVideoPreviewLayer.self
}
func session () -> AVCaptureSession {
return (self.layer as AVCaptureVideoPreviewLayer).session
}

func setSession(session : AVCaptureSession) -> Void {
(self.layer as AVCaptureVideoPreviewLayer).session = session;
(self.layer as AVCaptureVideoPreviewLayer).videoGravity = AVLayerVideoGravityResizeAspect;

}
}

感谢任何帮助

最佳答案

首先获取屏幕尺寸,以便计算宽高比

    let screenWidth = UIScreen.mainScreen().bounds.size.width
let screenHeight = UIScreen.mainScreen().bounds.size.height
var aspectRatio: CGFloat = 1.0

var viewFinderHeight: CGFloat = 0.0
var viewFinderWidth: CGFloat = 0.0
var viewFinderMarginLeft: CGFloat = 0.0
var viewFinderMarginTop: CGFlaot = 0.0

现在计算预览图层的大小。

    func setSession(session : AVCaptureSession) -> Void {

if screenWidth > screenHeight {
aspectRatio = screenHeight / screenWidth * aspectRatio
viewFinderWidth = self.bounds.width
viewFinderHeight = self.bounds.height * aspectRatio
viewFinderMarginTop *= aspectRatio
} else {
aspectRatio = screenWidth / screenHeight
viewFinderWidth = self.bounds.width * aspectRatio
viewFinderHeight = self.bounds.height
viewFinderMarginLeft *= aspectRatio
}

(self.layer as AVCaptureVideoPreviewLayer).session = session;

将图层的 videoGravity 设置为 AVLayerVideoGravityResizeAspectFill,以便图层拉伸(stretch)以填充给定的自定义 View 。

        (self.layer as AVCaptureVideoPreviewLayer).videoGravity = AVLayerVideoGravityResizeAspectFill;

最后,将预览图层的框架设置为上面计算的值以及您喜欢的任何偏移量。

        (self.layer as AVCaptureVideoPreviewLayer).frame = CGRectMake(viewFinderMarginLeft, viewFinderMarginTop, viewFinderWidth, viewFinderHeight)

}

这可能需要一些调整,因为我还没有进行现场测试,但您应该能够创建一个由 APPreviewView 边界分隔的更灵活的 VideoPreviewArea。

关于swift - AVCaptureVideoPreviewLayer 和从相机位置预览,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28480383/

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