簡體   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