2

在此处输入图像描述

我有一个半透明的 NSView,我用它作为阴影来使主窗口变暗,而模态窗口在我的 Cocoa 应用程序(OS X Yosemite)中显示为工作表。

有关独立的示例项目,请参阅下面的更新部分。

阴影会正确显示,但在它覆盖视图层次结构中较低的其他组件的地方,这些组件的背景变得可见并呈现为半透明(虽然它们应该保持完全透明)。

在上面的屏幕截图中,您可以看到阴影覆盖了进度指示器(小方块)和 NSTextField(标签)的一半。纸张覆盖的一半与背景渲染不正确;另一半正常渲染。

视图层次结构中较低的组件位于 NSVisualEffectView 上,设置为“窗口后”、材质光和外观 Vibrant Light 的混合模式,并且 setWantsLayer 设置为 true。

我有一种感觉,关于基于层的 NSVisualEffectViews 和 NSViews 之间的组合交互,我缺少一些东西。

感谢您对可能导致错误渲染的原因的想法,因为我对 Cocoa 的复杂性仍然很陌生。谢谢!

更新

我刚刚制作了一个快速隔离的测试用例来演示这个问题。你可以从这里克隆它

它还演示了一个带有 alpha(角指示器)而不是另一个(星形)的图像发生的问题

孤立测试的屏幕截图,显示了合成伪影

解决方法

感谢Daniel Chote参见推文),解决方法是手动将所有组件的背景颜色设置为透明。正如丹尼尔所说,“可怕的解决方案”,但至少是一个解决方案:)

(请务必记住在摸索它为什么仍然无法正常工作之前打开绘图背景。):)

如果有人有更好的解决方案,我会全力以赴。稍等一下,如果我什么都没听到,我会提交雷达。

4

0 回答 0