AsyncImage
Mit Xcode 13 steht uns in SwiftUI eine neue View namens AsyncImage zur Verfügung. Die ermöglicht es, ein Bild auf Basis einer URL asynchron zu laden. Das Bild wird automatisch angezeigt, sobald der Download erfolgreich abgeschlossen wurde.
Um eine AsyncImage-Instanz zu erzeugen, braucht es wenigstens die URL zum gewünschten Bild, wie der folgende Aufruf zeigt:
AsyncImage(url: URL(string: "https://www.myGreatImage.jpeg")!)
AsyncImage kann aber noch mehr. Beispielsweise lässt sich eine Skalierung des geladenen Bildes mithilfe des scale-Parameters festlegen. Das ist für hochauflösende Bilder spannend, die man im Code beispielsweise mit dem @2x-Suffix versehen würde:
AsyncImage(
url: URL(string: "https://www.myGreatImage.jpeg")!),
scale: 2
)
Bildkonfiguration und Platzhalter
Da AsyncImage eine ganz eigene View im SwiftUI-Framework ist, lassen sich diverse Image-spezifische Modifier nicht mit ihr verwenden, beispielsweise resizable().
Zu diesem Zweck ermöglicht es AsyncImage mithilfe des content-Closures, das geladene Bild in Form einer Image-Instanz zu konfigurieren und anschließend als anzuzeigendes Ergebnis zurück zu liefern. Gleichzeitig nutzt man den placeholder-Parameter, um eine beliebige View so lange als Platzhalter für AsyncImage anzuzeigen, bis das Bild erfolgreich geladen wurde.
Den beispielhaften Einsatz dieser beiden Parameter demonstriert das folgende Listing. Darin wird das geladene Bild in der Größe angepasst. Als Platzhalter fungiert eine einfache ProgressView.
AsyncImage(url: URL(string: "https://www.myGreatImage.jpeg")!) { image in
image
.resizable()
.scaledToFit()
.padding()
} placeholder: {
ProgressView()
}
Fazit
AsyncImage ist eine gelungene Ergänzung innerhalb des SwiftUI-Frameworks und bedient einen durchaus des Öfteren benötigten Workflow. Der Einsatz von AsyncImage ist erfreulich einfach und benötigt nicht mehr als eine URL. Zusätzlich lässt sich unkompliziert ein Platzhalter ergänzen, der automatisch durch das konkrete Bild ersetzt wird, sobald das zur Verfügung steht.
Euer Thomas
Schreibe einen Kommentar zu Werner Antwort abbrechen