如何解决SwiftUI:翠鸟 KFImage 在 LazyHStack 中闪烁图像
尽管我将 loaddiskFileSynchronously()
设置为视图,但在拖动视图时,LazyHStask 中的 KFImage 会闪烁图像。
我怀疑 KFImage 每次调用 onAppear()
时都会加载图像,并且它使图像闪烁。
但似乎 KFImage 防止在其 onAppear()
中浪费重新加载图像。
https://github.com/onevcat/Kingfisher/blob/e30efd82368276664b9ffb8a10dc29cd6a6810da/Sources/SwiftUI/KFImageRenderer.swift#L75
我该如何解决这个问题?
这是重现问题的示例片段。
struct SampleView : View {
let urls: [URL?]
@GestureState private var draggingOffset: CGFloat = 0
@State private var index: Int = 0
init(urls: [URL?]) {
self.urls = urls
}
var body: some View {
LazyHStack(spacing: 0) {
ForEach(urls.indices,id: \.self) { position in
KFImage(urls[position])
.resizable()
.loaddiskFileSynchronously()
.frame(width: UIScreen.main.bounds.width,alignment: .center)
.scaledToFit()
}
}
.frame(width: UIScreen.main.bounds.width,height: UIScreen.main.bounds.height,alignment: .leading)
.offset(x: -CGFloat(index) * UIScreen.main.bounds.width)
.offset(x: draggingOffset)
.animation(.interactiveSpring(),value: index)
.animation(.interactiveSpring(),value: draggingOffset)
.gesture(
DragGesture()
.updating($draggingOffset) { value,state,_ in
state = value.translation.width
}
.onEnded { value in
let offset = value.translation.width / UIScreen.main.bounds.width
let newIndex = (CGFloat(index) - offset).rounded()
index = min(max(Int(newIndex),0),urls.count - 1)
}
)
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。