所有开源包
界面Swift

SwiftShaders

面向 SwiftUI view 的 Metal shader 效果:颜色、模糊、扭曲、波纹和过渡。

7星标数最新版本: v2.0.0更新时间: 2026年10月14日
支持平台:iOS 17macOS 14

许可证: MIT

一个面向 iOS 17+ 和 macOS 14+ 的无依赖 Swift package。每种效果都是建立在 SwiftUI 自身的 colorEffect、distortionEffect 和 layerEffect 之上的单个 view modifier、fill 或 transition,因此可以用在任何 view 上。每个公开参数在到达 GPU 之前都会被检查,效果本身也由渲染 view 并比较像素的测试来验证。

功能特性

  • 26 个 view modifier、3 种 fill 和 5 种 transition,背后由 31 个 [[ stitchable ]] Metal 函数支撑
  • 参数检查:范围会被夹断,NaN 会关闭某个效果,sample offset 被限制在 view 的对角线范围内,gradient map 最多使用 256 种颜色
  • 干净的边缘:比较相邻像素的效果只读取 view 内部的内容,颜色效果会保留文字的抗锯齿透明度
  • 面向动画效果的 ShaderTime(.animated、.animated(speed:)、.fixed(_:)),在 Reduce Motion 开启时效果会停在第一帧
  • 跟随点击位置扩散的波纹效果,不会影响 view 自身的手势
  • 可直接调用 shader 函数的 ShaderLibrary.swiftShaders,以及用于确认构建工具是否编译了它们的 SwiftShaders.isMetalLibraryAvailable
  • 77 个在 macOS 和 iPhone 模拟器上运行的 Swift Testing 测试;其中一个库测试会把编译后的函数名与 Swift 代码调用的名称做比较
  • 包含三篇文章的 DocC 文档目录,以及面向 iOS 和 macOS 的 ShaderGallery 示例应用

快速开始

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}

安装

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

截图

用代码绘制的一幅风景画的三个副本:左侧的条纹随波浪摆动,中间从中心扩散出一道波纹,右侧有一条光带扫过
应用每种颜色效果后的风景画:原图、sepia、duotone、gradient map、posterize、threshold、dither、vignette、scanlines、film grain 和 shimmer
应用每种 layer 效果后的风景画:pixelate、halftone、sketch、emboss、sharpen、progressive blur、chromatic aberration、kaleidoscope 和 glitch
应用每种扭曲效果后的风景画:wave、water、swirl、bulge 和 loupe
dissolve、pixelate、swirl、circle reveal 和 radial wipe 过渡在 0%、25%、50% 和 75% 处的画面
示例应用中带有点大小滑块的 Halftone 界面(iPhone 模拟器)

时间线

  1. 仓库以三种效果开放;v1.0.0 标签打在第一个 commit 上,并在同一周内扩展

  2. 删除了 shader 源码;package 被精简为占位代码

  3. 重建开始:删除了占位源码、模板和旧测试

  4. v2.0.0:在 SwiftUI 的 shader modifier 基础上从头重写,包含 31 个 Metal 函数、像素测试、DocC 和一个示例应用

相关链接

相关文章

阅读文章