Je développe des widgets pour iOS et je ne sais vraiment pas comment télécharger des images pour les widgets.
Le widget télécharge actuellement une gamme d'objets et chaque objet a une URL d'une image. L'idée est que chaque objet fait un SimpleEntry
pour le Timeline
.
Quelle est la meilleure façon de réaliser cela? Je lis que les widgets ne devraient pas utiliser le ObservableObject
. Je récupère l'ensemble d'objets dans le fournisseur de chronologie, ce qui semble être ce que Apple recommande-t-il. Mais puis-je télécharger aussi les images là-bas et j'attends que tous sont effectués pour envoyer la chronologie?
Tout conseil serait très utile,
Je n'ai pas de bonne solution, mais j'essaie d'utiliser WidgetCenter.shared.reloadAllTimelines()
, et cela fait du sens. Dans le code suivant.
var downloadImage: UIImage?
func downloadImage(url: URL) -> UIImage {
var picImage: UIImage!
if self.downloadImage == nil {
picImage = UIImage(named: "Default Image")
DispatchQueue.global(qos: .background).async {
do {
let data = try Data(contentsOf: url)
DispatchQueue.main.async {
self.downloadImage = UIImage.init(data: data)
if self.downloadImage != nil {
DispatchQueue.main.async {
WidgetCenter.shared.reloadAllTimelines()
}
}
}
} catch { }
}
} else {
picImage = self.downloadImage
}
return picImage
}
De plus, vous devez prendre en compte quand supprimer cette image. Ceci comme tableView.reloadData()
.