我正在开发iOS相机应用程序,我想在其中显示带有黑条的相机,而无需以纵横比填充全屏。
我了解到预览层可用于控制视频尺寸,并且我能够分别使用AVLayerVideoGravityResizeAspect
和AVLayerVideoGravityResizeAspectFill
属性在侧面添加/删除黑条。
它适用于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>
开放性问题
为什么这在iPad上不起作用?为什么我看不到黑条?
在iPhone上,当我打印
previewLayer.frame.size.width
时,我总是得到相同的值,有或没有黑条。当我在侧面显示黑条时,我期望宽度更小。我在这里错过了什么?
谢谢!
videoGravity
仅指定图层如何适合其边界内的视频帧。它不会导致图层更改其尺寸 - 它将始终保留您通过 UIKit 分配的帧。
我假设您全屏显示图层。在 iPhone 上,这将显示此视频格式的黑条,因为屏幕没有 4:3 的比例。然而,大多数iPad都这样做。这就是为什么 iPad 上不需要酒吧的原因;视频完全适合屏幕。