Alle Open-Source-Pakete
UISwift

SwiftShaders

Metal-Shader-Effekte für SwiftUI-Views: Farbe, Unschärfe, Verzerrung, Ripples und Übergänge.

7SterneNeueste Version: v2.0.0Aktualisiert: 14. Oktober 2026
Plattformen:iOS 17macOS 14

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

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")

Screenshots

Drei Kopien einer im Code gezeichneten Landschaft: links schwingen die Zeilen auf einer Welle, in der Mitte breitet sich ein Ripple vom Zentrum aus, rechts zieht ein Lichtband hindurch
Die Landschaft mit jedem Farbeffekt: Original, Sepia, Duotone, Gradient Map, Posterize, Threshold, Dither, Vignette, Scanlines, Film Grain und Shimmer
Die Landschaft mit jedem Layer-Effekt: Pixelate, Halftone, Sketch, Emboss, Sharpen, Progressive Blur, Chromatic Aberration, Kaleidoscope und Glitch
Die Landschaft mit jeder Verzerrung: Wave, Water, Swirl, Bulge und Loupe
Frames der Transitions Dissolve, Pixelate, Swirl, Circle Reveal und Radial Wipe bei 0, 25, 50 und 75 Prozent
Der Halftone-Screen der Beispiel-App mit einem Punktgrößen-Slider im iPhone-Simulator

Zeitleiste

  1. Repository eröffnet mit drei Effekten; v1.0.0 wurde auf den ersten Commit getaggt und in derselben Woche erweitert

  2. Shader-Quellen entfernt; das Package wurde auf Platzhaltercode reduziert

  3. Neuaufbau begonnen: Platzhalterquellen, Templates und alte Tests entfernt

  4. v2.0.0: von Grund auf neu geschrieben auf Basis von SwiftUIs Shader-Modifiern, mit 31 Metal-Funktionen, Pixeltests, DocC und einer Beispiel-App

Links

Verwandter Artikel

Artikel lesen