1

I have the following code:


struct CameraPreview: UIViewRepresentable {
    
    @ObservedObject var camera: Camera
    
    class CameraView: UIView {
        override class var layerClass: AnyClass {
            AVCaptureVideoPreviewLayer.self
        }
        
        var videoPreviewLayer: AVCaptureVideoPreviewLayer {
            return layer as! AVCaptureVideoPreviewLayer
        }
    }
    
    func makeUIView(context: Context) -> CameraView {
        let cameraView = CameraView()
        
        cameraView.videoPreviewLayer.session = camera.session
        cameraView.videoPreviewLayer.videoGravity = .resizeAspect
        cameraView.videoPreviewLayer.cornerRadius = 12
        
        cameraView.videoPreviewLayer.connection?.videoOrientation = .portrait
        cameraView.videoPreviewLayer.backgroundColor = CGColor(red: 1.0, green: 0, blue: 0, alpha: 1)
        
        camera.start()
        
        return cameraView
    }
    
    func updateUIView(_ cameraView: CameraView, context: Context) {
       
    }
}

But I haven’t been able to resize it in my SwiftUI View to the camera’s preview true size, I’m stuck where I have a bigger frame than it actually needs: Bigger frame AVCaptureVideoPreviewLayer

Is there a way to make the AVCaptureVideoPreviewLayer/UIViewRepresentable frame only the size of the camera preview?

LeonardoXUI
  • 411
  • 3
  • 10

1 Answers1

-1

set cameraView.videoPreviewLayer.videoGravity = .resize it fits.