Я пытаюсь заставить предварительный просмотр камеры и фотографии работать в приложении swiftUI, я могу отобразить предварительный просмотр и сделать снимок, но пропорции получаются неправильными. Экран предварительного просмотра выглядит хорошо, но как только происходит захват, он искажается и не остается в портретной ориентации.
Экран предварительного просмотра выглядит следующим образом:
Какой-то код:
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
, выглядит следующим образом:
Код:
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)
}
Любая помощь, высоко ценится!