Glur
一个使用Metal来显示高效渐进模糊效果的SwiftUI库,就像Apple使用的那样。立即在App Store上试用。
安装
这个仓库是一个Swift包,只需在Xcode项目和目标中的文件 > 添加包依赖中包含它。然后,在你将要使用它的Swift文件中import Glur
。
[!注意]
虽然Glur支持较旧的平台,但它只会在iOS 17.0及更高版本、macOS 14.0及更高版本和tvOS 17.0及更高版本上使用Metal实现模糊效果。否则,它将呈现一个较差的兼容效果,开发者应在生产环境中使用前进行测试。Metal实现在watchOS上不可用,因此在这个平台上默认会呈现兼容效果。
使用方法
你可以使用以下修饰符添加glur效果:
.glur()
以下是所有可选参数:
.glur(radius: 8.0, // 完全应用时模糊效果的总半径。
offset: 0.3, // 从视图边缘到效果开始的距离,相对于视图大小。
interpolation: 0.4, // 从偏移到效果完全应用的距离,相对于视图大小。
direction: .down // 效果应用的方向。
)
[!警告]
在iOS模拟器中使用时,如果视图在任一维度超过545点,SwiftUI着色器效果可能无法显示。请注意,在实体设备上,效果应该能正常工作。
实现原理
这个项目建立在2023年6月WWDC之后开发的概念证明基础上。
它利用了Apple新的简化SwiftUI的Shader API。首先,我编写了一个Metal着色器,高效地为修改后的视图生成具有正确高斯权重分布的高斯模糊。然后,我稍微修改了它,使模糊半径可以根据偏移、插值和方向值在垂直或水平轴上变化。
[!警告] 由于着色器是通过Apple自己的SwiftUI Shader API应用的,它受到该API施加的限制。这意味着Glur只能应用于纯SwiftUI视图,不包括基于UIKit的视图,如
ScrollView
。
[!提示] 如果你想学习如何使用SwiftUI编写你的第一个Metal着色器,请查看我为Cindori博客写的这个教程。
演示
你可以通过此仓库中的GlurDemo项目在你的设备或模拟器上运行Glur的演示。