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)
}
}
Этот Image
аргумент uiImage
передается old-logo
(заполнитель), если в imageLoader
(a BindableObject
) нет данных, и заменяет его на правильный после асинхронной загрузки:
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
, и у нас есть изображение? скажем, я хочу анимацию постепенного исчезновения ..