SwiftShaders
Metal-Shader-Effekte für SwiftUI-Views: Farbe, Unschärfe, Verzerrung, Ripples und Übergänge.
Lizenz: MIT
Ein abhängigkeitsfreies Swift-Package für iOS 17+ und macOS 14+. Jeder Effekt ist ein View-Modifier, Fill oder Transition auf Basis von SwiftUIs eigenen colorEffect, distortionEffect und layerEffect und funktioniert daher auf jeder View. Jedes öffentliche Argument wird geprüft, bevor es die GPU erreicht, und die Effekte werden durch Tests verifiziert, die Views rendern und Pixel vergleichen.
Funktionen
- 26 View-Modifier, 3 Fills und 5 Transitions, basierend auf 31 [[ stitchable ]]-Metal-Funktionen
- Argumentprüfungen: Wertebereiche werden begrenzt, NaN schaltet einen Effekt aus, Sample-Offsets sind auf die Diagonale der View begrenzt, und Gradient-Maps verwenden höchstens 256 Farben
- Saubere Kanten: Effekte, die benachbarte Pixel vergleichen, lesen nur innerhalb der View, und Farbeffekte behalten den kantengeglätteten Alpha-Wert von Text
- ShaderTime (.animated, .animated(speed:), .fixed(_:)) für animierte Effekte, die bei aktiviertem Reduce Motion bei ihrem ersten Frame stehen bleiben
- Dem Tap folgende Ripples, die die eigenen Gesten der View weiterhin funktionieren lassen
- ShaderLibrary.swiftShaders, um die Shader-Funktionen direkt aufzurufen, und SwiftShaders.isMetalLibraryAvailable, um zu prüfen, ob das Build-Tool sie kompiliert hat
- 77 Swift-Testing-Tests laufen auf macOS und einem iPhone-Simulator; ein Library-Test vergleicht die kompilierten Funktionsnamen mit den Namen, die der Swift-Code aufruft
- DocC-Katalog mit drei Artikeln und die Beispiel-App ShaderGallery für iOS und macOS
Schnellstart
1import SwiftShaders2import SwiftUI3 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…)
1https://github.com/muhittincamdali/SwiftShaders.gitSwift Package Manager
1.package(url: "https://github.com/muhittincamdali/SwiftShaders.git", from: "2.0.0")Screenshots






Zeitleiste
Repository eröffnet mit drei Effekten; v1.0.0 wurde auf den ersten Commit getaggt und in derselben Woche erweitert
Shader-Quellen entfernt; das Package wurde auf Platzhaltercode reduziert
Neuaufbau begonnen: Platzhalterquellen, Templates und alte Tests entfernt
v2.0.0: von Grund auf neu geschrieben auf Basis von SwiftUIs Shader-Modifiern, mit 31 Metal-Funktionen, Pixeltests, DocC und einer Beispiel-App