如何解决SwiftUI在滚动视图项目中加载图像
ScrollView -> LazyVGrid -> ForEach -> BookImage
每个BookImage
收到一个URL
加载的onAppear
struct BookImage: View {
var url: URL?
@State var image: UIImage?
@State var subscription: AnyCancellable?
var body: some View {
Group {
if let image = image {
Image(uiImage: image.vignette(radius: 1,intensity: 1))
.resizable()
} else {
Rectangle().foregroundColor(.gray)
.aspectRatio(0.7,contentMode: .fill)
.overlay(Image(systemName: "questionmark.square").foregroundColor(.white))
}
}
.onAppear() {
if let url = url,image == nil {
subscription = ImageService.shared.image(at: url).assign(to: \.image,on: self)
}
}
}
}
每当我向上或向下滚动时,都会调用onAppear
方法,这是可以的。
我想知道的是为什么每次都加载图像。调用@State var image: UIImage?
方法时,.onAppear
似乎总是为零。
我检查了视图是否在滚动时没有重新初始化/创建,这是完美的,但是我不明白为什么image
总是为零。
有什么主意如何避免用户每次上下滚动时加载图像?
我注意到,即使分配了值,对图像的检查也总是失败。不知道发生了什么。
.onAppear() {
if let url = url,image == nil {
subscription = ImageService.shared.image(at: url).sink { image in
self.image = image
print("\(self.image == nil)")
}
}
}
始终打印真实...
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。