Tous les paquets open source
InterfaceSwift

SwiftShaders

Effets de shaders Metal pour les vues SwiftUI : couleur, flou, distorsion, ondulations et transitions.

7ÉtoilesDernière version: v2.0.0Mis à jour: 14 octobre 2026
Plateformes:iOS 17macOS 14

Licence: MIT

Un package Swift sans dépendance pour iOS 17+ et macOS 14+. Chaque effet est un seul modifier, fill ou transition de vue construit sur les propres colorEffect, distortionEffect et layerEffect de SwiftUI, donc il fonctionne sur n'importe quelle vue. Chaque argument public est vérifié avant d'atteindre le GPU, et les effets sont validés par des tests qui rendent des vues et comparent les pixels.

Fonctionnalités

  • 26 modifiers de vue, 3 fills et 5 transitions, appuyés sur 31 fonctions Metal [[ stitchable ]]
  • Vérifications d'arguments : les plages sont bornées, NaN désactive un effet, les décalages d'échantillonnage sont limités à la diagonale de la vue et les cartes de gradient utilisent au plus 256 couleurs
  • Bords propres : les effets qui comparent des pixels voisins ne lisent qu'à l'intérieur de la vue, et les effets de couleur conservent l'alpha anticrénelé du texte
  • ShaderTime (.animated, .animated(speed:), .fixed(_:)) pour les effets animés, qui s'arrêtent à leur première image quand Réduire les animations est activé
  • Ondulations qui suivent le toucher et laissent fonctionner les propres gestes de la vue
  • ShaderLibrary.swiftShaders pour appeler directement les fonctions de shader, et SwiftShaders.isMetalLibraryAvailable pour vérifier que l'outil de build les a compilées
  • 77 tests Swift Testing exécutés sur macOS et un simulateur iPhone ; un test de bibliothèque compare les noms de fonctions compilées aux noms que le code Swift appelle
  • Catalogue DocC avec trois articles et l'app d'exemple ShaderGallery pour iOS et macOS

Démarrage rapide

swift
1import SwiftShaders
2import SwiftUI
3 
4struct ContentView: View {
5 var body: some View {
6 Image(systemName: "mountain.2.fill")
7 .font(.system(size: 96))
8 .foregroundStyle(.blue)
9 .padding(40)
10 .background(.blue.opacity(0.15), in: .rect(cornerRadius: 24))
11 .halftone(dotSize: 6, ink: .blue, paper: .white)
12 }
13}

Installation

Xcode (File › Add Package Dependencies…)

text
1https://github.com/muhittincamdali/SwiftShaders.git

Swift Package Manager

swift
1.package(url: "https://github.com/muhittincamdali/SwiftShaders.git", from: "2.0.0")

Captures d'écran

Trois copies d'un paysage dessiné en code : à gauche les lignes ondulent sur une vague, au centre une ondulation se propage depuis le centre, à droite une bande de lumière balaie l'écran
Le paysage avec chaque effet de couleur : original, sépia, duotone, carte de gradient, postérisation, seuillage, tramage, vignettage, lignes de balayage, grain de film et shimmer
Le paysage avec chaque effet de calque : pixelisation, demi-ton, croquis, relief, netteté, flou progressif, aberration chromatique, kaléidoscope et glitch
Le paysage avec chaque distorsion : vague, eau, tourbillon, renflement et loupe
Images des transitions dissolve, pixelate, swirl, circle reveal et radial wipe à 0, 25, 50 et 75 pour cent
Écran Halftone de l'app d'exemple avec un curseur de taille de point sur un simulateur iPhone

Chronologie

  1. Dépôt ouvert avec trois effets ; v1.0.0 étiquetée sur le premier commit et le package étendu la même semaine

  2. Sources des shaders supprimées ; le package a été réduit à du code espace réservé

  3. Reconstruction amorcée : sources espace réservé, modèles et anciens tests supprimés

  4. v2.0.0 : réécrit entièrement sur les modifiers de shader de SwiftUI, avec 31 fonctions Metal, des tests de pixels, DocC et une app d'exemple

Liens

Article associé

Lire l'article