You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 11:46:05