Post

Customisation avec .clipShape() et .overlay() dans SwiftUI

Maîtrisez les modificateurs `.clipShape()` et `.overlay()` pour styliser vos vues et créer des interfaces visuellement percutantes.

Customisation avec .clipShape() et .overlay() dans SwiftUI

Customisation avec .clipShape() et .overlay() dans SwiftUI

SwiftUI propose deux modificateurs ultra puissants pour styliser tes composants :

  • .clipShape() : pour découper une vue selon une forme
  • .overlay() : pour superposer un élément sur une autre vue

Dans cet article, tu vas apprendre à :

  • Masquer des vues avec des formes (Circle, Capsule, RoundedRectangle)
  • Ajouter des contours, des calques visuels ou du texte en surimpression
  • Combiner les deux pour des effets d’interface modernes et dynamiques

✂️ .clipShape() — Masquer une vue dans une forme

Le modificateur .clipShape() permet de découper une vue selon une forme géométrique. C’est parfait pour :

  • Créer des avatars ronds
  • Appliquer des effets visuels modernes
  • Ajouter du style à des images, fonds ou boutons

Exemple : Avatar circulaire


1
2
3
4
5
Image("profil")
    .resizable()
    .scaledToFill()
    .frame(width: 120, height: 120)
    .clipShape(Circle())

💡 L’image est “coupée” en cercle, même si le fichier est rectangulaire.


🧩 .overlay() — Ajouter une vue par-dessus une autre

Le modificateur .overlay() permet de superposer une vue au-dessus d’une autre. Tu peux y mettre :

  • Une forme (ex. un cercle ou une bordure)
  • Du texte
  • Une autre vue entièrement custom

Exemple : Image + contour


1
2
3
4
5
6
7
8
9
Image("profil")
    .resizable()
    .scaledToFill()
    .frame(width: 120, height: 120)
    .clipShape(Circle())
    .overlay(
        Circle()
            .stroke(Color.white, lineWidth: 4)
    )

💡 Ici, on combine les deux pour obtenir une image circulaire avec un contour blanc.


🔥 Combo complet : avatar stylisé avec ombre


1
2
3
4
5
6
7
8
9
Image("profil")
    .resizable()
    .scaledToFill()
    .frame(width: 120, height: 120)
    .clipShape(Circle())
    .overlay(
        Circle().stroke(Color.white, lineWidth: 4)
    )
    .shadow(radius: 10)


🖼 Ajouter un badge avec .overlay()

Tu peux aussi superposer une icône ou un texte par-dessus une vue :


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
ZStack(alignment: .topTrailing) {
    Image(systemName: "bell.fill")
        .font(.system(size: 50))
        .padding()

    Circle()
        .fill(Color.red)
        .frame(width: 20, height: 20)
        .overlay(
            Text("1")
                .font(.caption2)
                .foregroundColor(.white)
        )
        .offset(x: 5, y: -5)
}

💡 C’est parfait pour un badge de notification.


🧠 Astuce : Appliquer .clipShape() sur d’autres composants

Tu n’es pas limité aux images ! Tu peux découper :

  • des Text
  • des Buttons
  • des VStack, ZStack

Exemple : bouton en forme de capsule


1
2
3
4
5
Text("Envoyer")
    .padding()
    .background(Color.blue)
    .foregroundColor(.white)
    .clipShape(Capsule())

💡 Résultat : un bouton stylisé et moderne.


🧪 Bonus : .overlay() dynamique avec @State

Ajoute ou retire dynamiquement un overlay en fonction d’un état.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@State private var isSelected = false

Rectangle()
    .fill(Color.orange)
    .frame(width: 150, height: 80)
    .overlay(
        isSelected ?
        Text("✅")
            .font(.largeTitle)
            .foregroundColor(.white)
        : nil
    )
    .onTapGesture {
        isSelected.toggle()
    }

💡 Appuyer sur le rectangle affiche ou masque un ✅.


✅ Conclusion

.clipShape() et .overlay() sont des modificateurs essentiels pour :

  • Créer des interfaces plus visuelles
  • Améliorer la lisibilité
  • Rendre ton app plus professionnelle

Et ce, en quelques lignes seulement

📌 Prochain article : Structurer son code SwiftUI en composants

This post is licensed under CC BY 4.0 by the author.