我正在使用可观察对象来更新视图 - 驱动程序每秒更新一个图像文件。但实际图像没有更新,只有不透明度属性 - 我只是使用不透明度来查看更改。我期望整个视图(包括图像本身)随着观察到的对象的变化而更新。
这是代码:
import SwiftUI
struct StreamingImageView: View {
var filePath = URL(string: "file:/Users/\(NSUserName())/Library/Containers/GB.IndigoPolarAlignAid/Data/img_01.jpg")
@ObservedObject var monitor: FileMonitor
init(){
print("StreamingImageView: \(filePath!)")
monitor = FileMonitor(filePath: filePath!)
}
var body: some View {
GeometryReader { geometry in
AsyncImage(url: filePath)
.opacity(Double(monitor.fileUpdateCount)/10.0)
Text("count \(monitor.fileUpdateCount) \(filePath!)")
}
}
}
答案是由 @jnpdx 提供的 - 在上面的讨论中 - 他建议添加一个独特的
id
属性 - 我使用 monitor.fileUpdateCount 来执行此操作,并根据需要获得带有刷新 jpg 的更新显示。这是有效的最小代码:
import SwiftUI
let filePath = URL(string: "file:/Users/\(NSUserName())/Library/Containers/GB.IndigoPolarAlignAid/Data/img_01.jpg")
struct StreamingImageView: View {
@ObservedObject var monitor: FileMonitor = FileMonitor(filePath: filePath!)
var id: Int = 0
var body: some View {
AsyncImage(url: monitor.filePath)
.id(monitor.fileUpdateCount)
}