Image de présentation d’un écran iOS illustrant les image(systemName) en SwiftUI.

Image(SystemName)

Image de présentation d’un écran iOS illustrant les image(systemName) en SwiftUI.

Image(SystemName)

Qu’est-ce qu’une image système ?

Une image système est une icône prédéfinie fournie directement par le système d’exploitation. Ces icônes sont pratiques pour représenter des actions, des états ou des types de données dans une application. Elles sont conçues pour s’intégrer parfaitement dans l’interface utilisateur et sont disponibles dans toutes les tailles et résolutions nécessaires pour les différents appareils sous iOS, macOS, watchOS et tvOS.

En utilisant des images système, tu bénéficies d’icônes qui s’adaptent automatiquement aux différents thèmes (clair/sombre) et aux résolutions des appareils.

SF Symbols

Apple fournit une collection d’icônes optimisées appelée SF Symbols, qui peut être utilisée directement dans les applications SwiftUI. Ces symboles sont conçus pour s’harmoniser avec la typographie d’Apple et peuvent être ajustés en poids, en échelle, et en design.

sf-symbols

La bibliothèque de SF Symbols est intégrée directement dans Xcode. Pour y accéder, c’est très simple, clique sur le + en haut à gauche de ton éditeur, puis sélectionne l’icône en forme d’étoile. Comme illustré sur le screen ci-dessous, tu auras accès à une vaste collection d’icônes prêtes à l’emploi pour tes projets.

Capture d'écran qui présente le menu de sélection des symbolSF dans Xcode
Pour faciliter encore plus la recherche de tes icônes, je te conseille de télécharger l’application SF Symbols. Avec cette application, tu pourras filtrer tes recherches de manière plus efficace et avoir une meilleure visibilité sur toutes les options disponibles. C’est un outil pratique pour trouver rapidement les icônes adaptées à ton projet, tout en explorant les différentes variantes et styles proposés par Apple.
Capture d'écran qui montre l'application d'icône d'apple symbole SF

Utiliser des images système

Pour utiliser une image système en SwiftUI, tu dois utiliser le composant Image accompagné de la propriété systemName. Cette propriété prend le nom de l’icône système que tu veux afficher en argument.


Image(systemName: "swift")
Capture d’écran d’une app iOS montrant un image systemeName, le logo de Swift ici

Personnalisation

Tu peux personnaliser une image système en modifiant sa couleur, sa taille ou son poids. Comme les valeurs de systemName sont des chaînes de caractères (String), tu peux utiliser les mêmes modificateurs que pour le composant Text(), comme .font(), .foregroundStyle(), et .fontWeight().


Image(systemName: "tortoise")
	.font(.system(size: 80))
	.fontWeight(.black)
	.foregroundStyle(.green)
Capture d’écran d’une app iOS montrant un image systemeName personalisée , l'icône tortoise ici

Variante de couleurs .symbolRenderingMode()

Ce modificateur permet de spécifier le style de rendu d’une icône SF Symbol. Ça affecte la manière dont l’icône est colorée. Par exemple, une icône peut être rendue en monochrome, en hiérarchie de couleurs, ou en palette.


Image(systemName: "basketball.circle.fill")
      .foregroundColor(.orange)
Image(systemName: "basketball.circle.fill")
    .symbolRenderingMode(.hierarchical)
    .foregroundColor(.orange)
Image(systemName: "basketball.circle.fill")
    .symbolRenderingMode(.palette)
    .foregroundStyle(Color.black, Color.orange)
Capture d’écran d’une app iOS montrant des imageSystemeName, avec une déclinaison de couleur orange

Couleur variable variableValue

On peut attribuer une variable directement dans les attribut du composant Image, variableValue: ca permet de donner du dynamisme aux SF Symbols.


struct MusicView: View {
    @State var progress: Double = 0
    
    var body: some View {
        ZStack {
            Color.black
            VStack {
                Image(systemName: "waveform.badge.mic", variableValue: progress)
                    .foregroundStyle(Color.white, Color.pink)
                    .font(.system(size: 100))
                Slider(value: $progress, in: 0...1)
            }
        }
        .ignoresSafeArea()
    }
}
Animation d’un GIF montrant l’évolution du volume d’un micro via une icône de micro issue des SF Symbols.

Accessibilité .accessibilityLabel()

Apple recommande d’ajouter une étiquette d’accessibilité aux images système pour aider les utilisateurs utilisant des lecteurs d’écran (VoiceOver). Utilise .accessibilityLabel() pour décrire la fonction de l’image.


Image(systemName: "swift")
  .font(.system(size: 80))
  .fontWeight(.black)
  .foregroundStyle(.orange)
  .accessibilityLabel(Text("Logo de Swift"))

Animation .symbolEffect()

Depuis iOS 17, les symboles SF peuvent s’animer, et c’est carrément stylé !

On a sept animations intégrées que tu peux coller à n’importe quel symbole SF : rebond, impulsion, couleur variable, échelle, apparition, disparition, remplacement.

Ces animations sont classées en quatre types de comportements :

Discrete l’animation se joue une fois et puis c’est terminé.

Indefinite l’animation tourne en boucle jusqu’à ce que tu la stoppes.

Transition on anime un symbole pour le faire apparaître ou disparaître.

Content Transition pour animer le remplacement d’un symbole par un autre.

Discrete


struct ImageSFAnimateView: View {
    @State private var count = 0

    var body: some View {
        VStack {
            Image(systemName: "target")
                 .font(.system(size: 70))
                 .foregroundStyle(.orange)
                .symbolEffect(
                    .bounce,
                    value: count
                )
            Button("GO !") {
                count += 1
            }
            .foregroundStyle(.white)
            .fontWeight(.black)
            .padding(.top, 20)
        }
    }
}
Animation d’un GIF montrant une icône de cible qui s’agrandit lorsqu’on appuie sur un bouton.

Indefinite


struct ImageSFAnimateView: View {
    @State private var animationIsActive = false

    var body: some View {
        VStack {
            Image(systemName: "chart.bar.fill")
                .font(.system(size: 70))
                .foregroundStyle(.orange)
                .symbolEffect(
                    .variableColor,
                    isActive: animationIsActive
                )
            Button("Go !") {
                animationIsActive.toggle()
            }
            .foregroundStyle(.white)
            .fontWeight(.black)
            .padding(.top, 20)
        }
     }
}
Animation d’un GIF montrant une icône de graphique dont la couleur évolue au fil du temps

Transition


struct ImageSFAnimateView: View {
    @State private var symbolIsHidden = true
 
    var body: some View {
        VStack {
            Spacer()
            if !symbolIsHidden {
                Image(systemName: "square.3.layers.3d")
                    .font(.system(size: 70))
                    .foregroundStyle(.orange)
                    .transition(.symbolEffect(.appear))
            }
            Spacer()
            Button("Go !") {
                symbolIsHidden.toggle()
            }
            .fontWeight(.black)
            .foregroundStyle(.white)
        }
    }
}
Animation d’un GIF montrant une icône dont la couleur évolue au fil du temps après avoir appuyé sur un bouton.

Content Transition


struct ImageSFAnimateView: View {
    @State private var brand = false
    private var buttonTitle: String {
        return brand ? "Xbox" : "Play-Station"
    }
    
    var body: some View {
        VStack {
            Button {
                brand.toggle()
            } label: {
                Label(buttonTitle, systemImage: !brand ? "playstation.logo" : "xbox.logo")
                    .foregroundColor(brand ? .green : .blue)
                    .fontWeight(.semibold)
            }
            .contentTransition(.symbolEffect(.replace))
        }
        .font(.largeTitle)
    }
}

Animation d’un GIF montrant une une bascule d'icône entre le logo de playstation et celui de xbox

Image(SystemName)

Note

Depuis la version 6 de SF Symbols, ce sont plus de 6 000 icônes qui sont à ta disposition, avec leurs variantes de rendu et d’animation. Bien sûr, tu as toujours la possibilité d’utiliser des bibliothèques d’icônes externes à iOS, mais garde en tête que tu as accès à une immense bibliothèque directement intégrée et totalement gratuite !

Image(SystemName)

Note

Depuis la version 6 de SF Symbols, ce sont plus de 6 000 icônes qui sont à ta disposition, avec leurs variantes de rendu et d’animation. Bien sûr, tu as toujours la possibilité d’utiliser des bibliothèques d’icônes externes à iOS, mais garde en tête que tu as accès à une immense bibliothèque directement intégrée et totalement gratuite !