gpt4 book ai didi

ios - AVCaptureVideoPreviewLayer 横向

转载 作者:技术小花猫 更新时间:2023-10-29 10:19:25 26 4
gpt4 key购买 nike

如何让“AVCaptureVideoPreviewLayer”在横向方向上正确显示?它在纵向模式下工作正常但不旋转,并且当父 View Controller 处于横向模式时显示旋转的相机捕获。

最佳答案

先说答案

- (void)viewWillLayoutSubviews {
_captureVideoPreviewLayer.frame = self.view.bounds;
if (_captureVideoPreviewLayer.connection.supportsVideoOrientation) {
_captureVideoPreviewLayer.connection.videoOrientation = [self interfaceOrientationToVideoOrientation:[UIApplication sharedApplication].statusBarOrientation];
}
}

- (AVCaptureVideoOrientation)interfaceOrientationToVideoOrientation:(UIInterfaceOrientation)orientation {
switch (orientation) {
case UIInterfaceOrientationPortrait:
return AVCaptureVideoOrientationPortrait;
case UIInterfaceOrientationPortraitUpsideDown:
return AVCaptureVideoOrientationPortraitUpsideDown;
case UIInterfaceOrientationLandscapeLeft:
return AVCaptureVideoOrientationLandscapeLeft;
case UIInterfaceOrientationLandscapeRight:
return AVCaptureVideoOrientationLandscapeRight;
default:
break;
}
NSLog(@"Warning - Didn't recognise interface orientation (%d)",orientation);
return AVCaptureVideoOrientationPortrait;
}

我在这个问题上看到了几篇 SO 帖子,找不到任何简单的解释,所以我想我会分享我自己的。

如果您按照 Apple 的示例进行操作,当您将 iOS 设备旋转为横向时,您将遇到两个潜在的问题

  1. 拍摄会出现旋转(就好像您将相机倾斜 90 度)
  2. 它不会完全跨越设定的边界

这里的问题是“CALayer”不支持自动旋转,因此,与您添加为 subview 的“UIView”不同,它不会在其父“UIView”旋转时旋转。因此,每次父 View 的边界发生变化时,您都必须手动更新其框架(不是父 View 的框架,因为旋转后框架保持不变)。这是通过覆盖容器 View Controller 中的“viewWillLayoutSubviews”来实现的。

其次,您应该使用“videoOrientation”属性来通知 AVFoundation 方向,以便它正确地进行预览。

希望这对您有所帮助。

关于ios - AVCaptureVideoPreviewLayer 横向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21258372/

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