gpt4 book ai didi

ios - 如何设置相机 View 以填充其父 View

转载 作者:IT王子 更新时间:2023-10-29 05:14:32 25 4
gpt4 key购买 nike

我不知道这个问题是关于自动布局还是我做错了什么。
我有一个 UIViewController 和一个 UIView 在里面。
我正在使用 AVCaptureSession 将相机 View 放入其中。
问题是,当我在 View 内部加载相机 View 时,它不会填充该 View ,因此我在左侧和右侧有间隙。
我想要做的是用相机填充整个 UIView
这是我的代码:

...
@IBOutlet weak var camView: UIView!
var previewLayer : AVCaptureVideoPreviewLayer!

override func viewDidLoad() {
...
previewLayer = AVCaptureVideoPreviewLayer.layerWithSession(session) as! AVCaptureVideoPreviewLayer
previewLayer.videoGravity = AVLayerVideoGravityResizeAspectFill
previewLayer.frame = self.camView.layer.bounds
self.camView.layer.addSublayer(previewLayer)
session.startRunning()

最佳答案

您需要在 subview 布局后进行设置。在 viewDidLayoutSubviews

Add view

Add outlet

Add Constraints

-(void)viewDidLayoutSubviews
{
[self setupAVCapture];
}


- (void)setupAVCapture {
NSError *error = nil;

AVCaptureSession *session = [AVCaptureSession new];
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone)
[session setSessionPreset:AVCaptureSessionPreset640x480];
else
[session setSessionPreset:AVCaptureSessionPresetPhoto];

// Select a video device, make an input
AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
AVCaptureDeviceInput *deviceInput = [AVCaptureDeviceInput deviceInputWithDevice:device error:&error];

if ([session canAddInput:deviceInput])
[session addInput:deviceInput];

AVCaptureVideoPreviewLayer *previewLayer = [AVCaptureVideoPreviewLayer layerWithSession:session];
[previewLayer setVideoGravity:AVLayerVideoGravityResizeAspectFill];

previewLayer.frame = self.camView.bounds;
[self.camView.layer addSublayer:previewLayer];
[session startRunning];
}

您可能发生的情况是,您的 viewDidLoad 中的边界尚未准确设置,因为 subview 尚未根据其约束进行布局。当您改为在 viewDidLayoutSubviews 中为 previewLayer 设置框架时,它将采用正确的方向。不过要小心,您还需要调整旋转预览,以及修改我使用的代码。抱歉,它不是 swift,但这应该无关紧要。只需将您的实例化和设置移动到 viewDidLayoutSubviews

因此对于您的代码,您应该这样做:

override func viewDidLayoutSubviews() {
...
previewLayer = AVCaptureVideoPreviewLayer.layerWithSession(session) as! AVCaptureVideoPreviewLayer
previewLayer.videoGravity = AVLayerVideoGravityResizeAspectFill
previewLayer.frame = self.camView.layer.bounds
self.camView.layer.addSublayer(previewLayer)
session.startRunning()

关于ios - 如何设置相机 View 以填充其父 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29534775/

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