[英]AVSampleBufferDisplayLayer in SwiftUI in UIViewRepresentable
我想在顶部添加 AVSampleBufferDisplayLayer 如果我的 UIImageView 但我需要访问该 AVSampleBufferDisplayLayer 作为属性。 错误自我不是一成不变的显示。
struct CamerImageSUIView: UIViewRepresentable {
internal lazy var cameraAVLayer: AVSampleBufferDisplayLayer = {
let avLayer = AVSampleBufferDisplayLayer()
avLayer.videoGravity = .resizeAspectFill
return avLayer
}()
func makeUIView(context: Context) -> ImageLoaderView {
let imageView = ImageLoaderView()
imageView.ribbonMode = false
imageView.event = false
imageView.tintColor = UIColor(named: "ColorC5")
imageView.backgroundColor = UIColor(named: "ColorC3")
imageView.contentMode = .scaleToFill
//HERE IS THE PROBLEM BECAUSE cameraAVLayer is immutable
imageView.layer.insertSublayer(cameraAVLayer, at: 0)
cameraAVLayer.frame = imageView.layer.bounds
return imageView
}
func updateUIView(_ uiView: ImageLoaderView, context: Context) {}
}
我的应用程序遇到了类似的问题,并提出了以下实现。
class CameraImageState: ObservableObject {
let displayLayer = AVSampleBufferDisplayLayer()
}
struct CamerImageSUIView: UIViewRepresentable {
@ObservedObject var state: CameraImageState
func makeUIView(context: Context) -> ImageLoaderView {
let imageView = ImageLoaderView()
imageView.ribbonMode = false
imageView.event = false
imageView.tintColor = UIColor(named: "ColorC5")
imageView.backgroundColor = UIColor(named: "ColorC3")
imageView.contentMode = .scaleToFill
state.displayLayer.videoGravity = .resizeAspectFill
state.displayLayer.frame = imageView.layer.bounds
imageView.layer.insertSublayer(state.displayLayer, at: 0)
return imageView
}
func updateUIView(_ uiView: ImageLoaderView, context: Context) {}
}
顺便说一句,(即使我没有修改你的代码)在 makeUIView 中设置 displayLayer 的框架没有意义,因为它无论如何都会改变。 您需要在 ImageLoaderView 的 layoutsubviews() 中执行此操作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.