AVVideoPreviewLayer gravity for iPad



我正在开发iOS相机应用程序,我想在其中显示带有黑条的相机,而无需以纵横比填充全屏。

我了解到预览层可用于控制视频尺寸,并且我能够分别使用AVLayerVideoGravityResizeAspectAVLayerVideoGravityResizeAspectFill属性在侧面添加/删除黑条。

它适用于iPhone,但不知何故,相同的代码在iPad上不起作用

我尝试打印在iPhone和iPad运行期间使用的活动格式。两者看起来都一样

在苹果手机上

<AVCaptureDeviceFormat: 0x2839d2490 
'vide'/'420v' 4032x3024, { 3- 30 fps}, HRSI:4032x3024, fov:57.716, max zoom:189.00 (upscales @1.00), AF System:2, ISO:23.0-1840.0, SS:0.000013-0.333333>

在 iPad 上

<AVCaptureDeviceFormat: 0x2833bf630
'vide'/'420v' 4032x3024, { 3- 30 fps}, HRSI:4032x3024, fov:63.301, max zoom:189.00 (upscales @1.00), AF System:2, ISO:22.0-2112.0, SS:0.000020-0.333333>

开放性问题

  1. 为什么这在iPad上不起作用?为什么我看不到黑条?

  2. 在iPhone上,当我打印previewLayer.frame.size.width时,我总是得到相同的值,有或没有黑条。当我在侧面显示黑条时,我期望宽度更小。我在这里错过了什么?

谢谢!

videoGravity仅指定图层如何适合其边界内的视频帧。它不会导致图层更改其尺寸 - 它将始终保留您通过 UIKit 分配的帧。

我假设您全屏显示图层。在 iPhone 上,这将显示此视频格式的黑条,因为屏幕没有 4:3 的比例。然而,大多数iPad都这样做。这就是为什么 iPad 上不需要酒吧的原因;视频完全适合屏幕。

最新更新