[英]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.