Glur 项目Logo


Twitter: @joogps

一个 SwiftUI 库,使用 Metal 显示高效的渐进式模糊,就像 Apple 使用的那样。立即在 App Store 上尝试。

A comparison of Glur and a simple masked material

安装

这是一个 Swift 包,因此只需将其包含在您的 Xcode 项目中,并在 File > Add package dependencies 下添加目标。然后,在您要使用它的 Swift 文件中 import Glur

注意

虽然 Glur 在较旧的平台上受支持,但它仅在 iOS 17.0 及更高版本、macOS 14.0 及更高版本以及 tvOS 17.0 及更高版本上利用模糊效果的 Metal 实现。否则,它将呈现一个较差的、兼容性效果,应由开发人员在生产环境中使用之前进行测试。

Metal 实现不适用于 watchOS,因此默认情况下,此平台上将呈现兼容性效果。

用法

您可以使用以下修饰符添加模糊效果

.glur()

以下是所有可选参数

.glur(radius: 8.0, // The total radius of the blur effect when fully applied.
      offset: 0.3, // The distance from the view's edge to where the effect begins, relative to the view's size.
      interpolation: 0.4, // The distance from the offset to where the effect is fully applied, relative to the view's size.
      direction: .down // The direction in which the effect is applied.
)

警告

如果在 iOS 模拟器中使用时,如果视图在任一维度上超过 545 点,则可能不会显示 SwiftUI 着色器效果。请注意,在物理设备上,该效果应按预期工作。

实现原理

这个项目建立在 2023 年 6 月 WWDC 之后开发的 概念验证 的基础上。

它利用了 Apple 新的简化 SwiftUI 着色器 API。首先,我编写了一个 Metal 着色器,它可以有效地为修改后的视图生成具有正确高斯权重分布的高斯模糊。然后,我稍微修改了它,以根据偏移量、插值和方向值来改变垂直或水平轴上的模糊半径。

警告

鉴于着色器是通过 Apple 自己的 SwiftUI 着色器 API 应用的,因此它受到该 API 施加的限制。这意味着 Glur 只能应用于纯 SwiftUI 视图,不包括 UIKit 支持的视图,例如 ScrollView

提示

如果您想学习如何使用 SwiftUI 编写您的第一个 Metal 着色器,请查看我为 Cindori 博客编写的 本教程

演示

您可以通过此存储库中的 GlurDemo 项目在您的设备或模拟器中运行 Glur 的演示。