繁体   English   中英

旋转后如何调整相机的宽高比?

[英]How to resize camera aspect ratio after rotation?

我有一个小的Swift程序来捕获视频。 如果我在横向模式下用手机启动应用程序,那么我会全屏显示

在此处输入图片说明

但是当我将手机旋转到“人像”时,它并不能覆盖整个屏幕。

在此处输入图片说明

我已经尝试过resizeAspectFill,但是它不起作用。 我怀疑在将屏幕旋转到新的宽高比时必须更改宽高比,但是似乎找不到成功完成此操作的示例。

有人可以帮忙吗?

示例代码如下所示:

    cameraPreviewLayer = AVCaptureVideoPreviewLayer(session: captureSession)
    cameraPreviewLayer?.videoGravity = AVLayerVideoGravity.resizeAspectFill

    let orientation: UIDeviceOrientation = UIDevice.current.orientation

    switch (orientation) {
    case .portrait:
        cameraPreviewLayer?.connection?.videoOrientation = .portrait
    case .landscapeRight:
        cameraPreviewLayer?.connection?.videoOrientation = .landscapeLeft
    case .landscapeLeft:
        cameraPreviewLayer?.connection?.videoOrientation = .landscapeRight
    case .portraitUpsideDown:
        cameraPreviewLayer?.connection?.videoOrientation = .portraitUpsideDown
    default:
        cameraPreviewLayer?.connection?.videoOrientation = .portraitUpsideDown
    }

    cameraPreviewLayer?.frame = self.view.frame

    self.view.layer.insertSublayer(cameraPreviewLayer!, at: 0)

谢谢。

尝试将这些代码移动到viewDidLayoutSubviews

override func viewDidLayoutSubviews() {
    let orientation: UIDeviceOrientation = UIDevice.current.orientation

    switch (orientation) {
    case .portrait:
        cameraPreviewLayer?.connection?.videoOrientation = .portrait
    case .landscapeRight:
        cameraPreviewLayer?.connection?.videoOrientation = .landscapeLeft
    case .landscapeLeft:
        cameraPreviewLayer?.connection?.videoOrientation = .landscapeRight
    case .portraitUpsideDown:
        cameraPreviewLayer?.connection?.videoOrientation = .portraitUpsideDown
    default:
        cameraPreviewLayer?.connection?.videoOrientation = .portraitUpsideDown
    }

    cameraPreviewLayer?.frame = self.view.frame
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM