Swift UI камера показывает портретное изображение, но изображение получается пейзаж - PullRequest
1 голос
/ 30 марта 2020

Я пытаюсь заставить предварительный просмотр камеры и фотографии работать в приложении swiftUI, я могу отобразить предварительный просмотр и сделать снимок, но пропорции получаются неправильными. Экран предварительного просмотра выглядит хорошо, но как только происходит захват, он искажается и не остается в портретной ориентации.

Экран предварительного просмотра выглядит следующим образом:

enter image description here

Какой-то код:

class CameraController: UIViewController {
    //...
    override func viewDidLoad() {
        //...
        // Setup preview layer
        previewLayer = AVCaptureVideoPreviewLayer(session: captureSession)
        previewLayer?.videoGravity = .resizeAspectFill
        previewLayer?.connection?.videoOrientation = .portrait
        previewLayer?.frame = view.frame
        view.layer.insertSublayer(previewLayer!, at: 0)
        //...
    }
}

Но после того, как я сделаю снимок, Image, который я отображаю в VStack, выглядит следующим образом:

enter image description here

Код:

VStack {
    Image(uiImage: self.inputImage!)
        .resizable()
        .aspectRatio(contentMode: .fit)
        .edgesIgnoringSafeArea(.all)
}

Я использую .fit, потому что я хочу увидеть все это, и он просто выходит все неправильно. Кроме того, вот мой код установки камеры, происходящий внутри viewDidLoad:

captureSession.beginConfiguration()

// Get device
captureDevice = AVCaptureDevice.default(.builtInDualCamera, for: .video, position: .back)

do {
    // Create input
    let captureDeviceInput = try AVCaptureDeviceInput(device: captureDevice!)
    captureSession.addInput(captureDeviceInput)

    // Create output
    photoOutput = AVCapturePhotoOutput()
    captureSession.sessionPreset = .photo
    photoOutput?.setPreparedPhotoSettingsArray(
        [AVCapturePhotoSettings(format: [AVVideoCodecKey: AVVideoCodecType.jpeg])],
        completionHandler: nil
    )
    captureSession.connections.first?.videoOrientation = .portrait // tested with and and without this line
    captureSession.addOutput(photoOutput!)
    captureSession.commitConfiguration()
} catch {
    print(error)
}

Любая помощь, высоко ценится!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...