CameraPreview不遵循UIViewRepresentable协议问题求助
问题原因与解决方案
核心问题是UIViewRepresentable协议要求makeUIView方法返回UIView类型实例,但你的代码返回的是AVCaptureVideoPreviewLayer(这是CALayer的子类,并非UIView),因此不符合协议要求,导致报错。
修正后的代码如下:
struct CameraPreview: UIViewRepresentable { var session: AVCaptureSession func makeUIView(context: Context) -> UIView { let view = UIView() let previewLayer = AVCaptureVideoPreviewLayer(session: session) previewLayer.videoGravity = .resizeAspectFill previewLayer.frame = view.bounds view.layer.addSublayer(previewLayer) return view } func updateUIView(_ uiView: UIView, context: Context) { // 若需要更新会话或调整图层,可在此处理 if let previewLayer = uiView.layer.sublayers?.first as? AVCaptureVideoPreviewLayer { previewLayer.session = session previewLayer.frame = uiView.bounds } } }
关键修正说明
makeUIView改为返回UIView,将AVCaptureVideoPreviewLayer作为子图层添加到这个视图中updateUIView的参数类型同步改为UIView,可在方法内获取图层并更新会话或布局
内容的提问来源于stack exchange,提问作者Aelmord
相关产品推荐
相关产品推荐

