Scintillate(闪烁效果)

一个轻量级的、对 UIKit + AppKit 友好的方式,用于遮罩内容或显示加载状态。 可以把它看作是 SwiftUI 中 'redacted' 修饰符的 iOS + macOS 非 SwiftUI 应用程序版本。

内部实现

你可以浏览代码,但总而言之,该效果会递归地应用于每个子视图作为CALayer* (根据你的设置,可以选择使用CAGradientLayerCAAnimation)。当效果关闭时,这些图层应该会自动移除。

(* 注意:“每个子视图”指的是视图层次结构的绝对底部。也就是说,把它想象成一个树数据结构,效果只会应用于叶子节点。)

还有...

我没有太多 AppKit 方面的经验,所以它在NSView上的运行可能不如在UIView上那样流畅。 如果发现任何问题,请告诉我。

用法

设置

  1. 安装该包,可以通过 Swift Package Manager 完成。

  2. 决定你想要在哪里调用闪烁效果。 要启动它,你只需要提供你想要应用效果的根视图(记住它是递归的!),以及任何你想要的自定义设置。

例如

    Scintillate.kickStart(in: stackView)

将会以默认设置(无动画和默认颜色)启动闪烁效果。

要关闭效果,只需在同一个视图上调用shutDown

    Scintillate.shutDown(in: stackView)

自定义效果

可以通过你构建并传递给kickStart方法的ScintillateSettings来实现。 它允许你启用动画(默认是关闭的),将遮罩渲染为渐变,并自定义颜色(如果你选择动画和/或将遮罩制作为渐变而不指定辅助颜色,将根据主颜色推断出一个)。

待办事项 (TODOs)