NSAppearance、NSEffectView.Material 和 "Vibrancy" 之间有什么关系

What's the relationship between NSAppearance, NSEffectView.Material, and "Vibrancy"

如题名,NSAppearanceNSEffectView.Material、"vibrancy"之间的关系是什么?我通过实验发现,对于某些 material,选择 NSAppearance 可以改变 material 的显示方式(例如 NSEffectView.Material.titlebar 将根据活跃 NSAppearance),而其他 material(例如 .light)似乎并不关心。

我怀疑像 .titlebar 这样的 material 是 select 来自 .dark.ultradark.light 和 [= 的代理22=] 取决于 NSAppearance,但那似乎是 .appearanceBased 的作用。我还在描述中看到 NSAppearance.Name.vibrantLight...

This should only be set on an NSVisualEffectView or one of its subviews.

...这与 NSEffectView 文档中的声明有些矛盾...

The view’s effective appearance must allow vibrancy... in most cases you set the appearance on the window or on the visual effect view—subviews then inherit the appearance.

...建议将 vibrantLight 设置为整个 window 的 NSAppearance 可能是正确的(如果这是您想要的外观)。

最后,我对 "vibrancy" 到底是什么感到困惑;如果有人能解释一下,那就太好了。

因此,NSAppearance 通常描述针对设置外观的视图层次结构的控件样式、颜色等。

NSVisualEffectView 提供了一种实现两种效果的方法:半透明和活力。前者更明显,带有半透明的侧边栏或标题栏。 documentation 对活力的描述非常好:

Vibrancy is associated with translucency. It describes a compositing mode that does special blending such as Plus Lighter, Plus Darker, Color Dodge, or Color Burn.

基本上描述了视觉效果视图中的内容(文本、图像等)是如何根据半透明进行合成的。


那么这些有什么关系呢?

Material

Material 描述半透明效果的外观。正如您所指出的,有些受 NSAppearance 影响,有些则不受。那些在语义上描述了它们的用法,因此自定义 UI 可以与外观相似(.appearanceBased.titlebar.menu.popover.sidebar, .selection) 而其他允许对生成的半透明度进行特定控制 (.light, .dark, .mediumLight, .ultraDark) 但应该在与其关联的 NSAppearance 结合,以便视觉效果视图中的内容可以匹配半透明效果。除非你需要对 material 进行特定控制,否则使用 appearance-sensitive / 语义的可以得到更标准的 UI.

活力

所以为了得到NSVisualEffectView所能提供的内容活力效果,需要配合活力外观一起使用:.vibrantLight.vibrantDark。如果不设置 "vibrant" 外观,NSVisualEffectView 将仅在背景中提供半透明效果,其中的内容将看起来很普通,并且没有您在侧边栏或标题栏中看到的特殊混合模式。