SwiftUI: анимация изменений, которые зависят от @ObjectBinding - PullRequest
1 голос
/ 15 июня 2019

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, и у нас есть изображение? скажем, я хочу анимацию постепенного исчезновения ..

...