如何让 AsyncImage 通过更改图像来更新视图

问题描述 投票:0回答:1

我正在使用可观察对象来更新视图 - 驱动程序每秒更新一个图像文件。但实际图像没有更新,只有不透明度属性 - 我只是使用不透明度来查看更改。我期望整个视图(包括图像本身)随着观察到的对象的变化而更新。

这是代码:

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!)")
        }
    }
}
macos swiftui view
1个回答
0
投票

答案是由 @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)
}
© www.soinside.com 2019 - 2024. All rights reserved.