【发布时间】:2019-06-15 19:37:26
【问题描述】:
SwiftUI 具有使用 .animate() 的隐式动画和使用 .withAnimation() 的显式动画。但是,我不知道如何为图像更改设置动画:
struct ImageViewWidget : View {
@ObjectBinding var imageLoader: ImageLoader
init(imageURL: URL) {
imageLoader = ImageLoader(imageURL: imageURL)
}
var body: some View {
Image(uiImage:
(imageLoader.data.count == 0) ? UIImage(named: "logo-old")! : UIImage(data: imageLoader.data)!)
.resizable()
.cornerRadius(5)
.frame(width: 120, height:120)
}
}
如果imageLoader(BindableObject)中没有数据,则此Image 的uiImage 参数将传递给old-logo(占位符),并在异步加载后将其替换为正确的参数:
class ImageLoader : BindableObject {
let didChange = PassthroughSubject<Data, Never>()
var data = Data() {
didSet {
didChange.send(data)
}
}
init(imageURL: URL) {
print("Image loader being initted!")
let url = imageURL
URLSession.shared.dataTask(with: url) { (data, _, _) in
guard let data = data else { return }
DispatchQueue.main.async {
self.data = data
}
}.resume()
}
}
我如何为这个变化设置动画,在data.count 不再是0 的那一刻,我们有了图像?说我想要一个淡出动画..
【问题讨论】:
-
在你的图片加载器中尝试设置
withAnimation { yourDataVariable = data } -
但是在哪里?那里没有 UI(我正在添加
ImageLoader的代码) -
你仍然可以这样做
-
你似乎很确定。你能发布一个答案,以便我测试、投票和接受吗?