我有一个半透明的NSView,我用它作为阴影调暗主窗口,而模态窗口在我的Cocoa应用程序(OS X Yosemite)中显示为工作表。
有关隔离的示例项目,请参阅下面的更新部分。
阴影正确显示,但它覆盖视图层次结构中较低的其他组件,这些组件的背景变得可见并呈半透明呈现(同时它们应保持完全透明)。
在上面的屏幕截图中,您可以看到覆盖进度指示器(小方块)和NSTextField(标签)一半的阴影。纸张覆盖的一半与背景不正确地呈现;另一半正常呈现。
视图层次结构中较低的组件位于NSVisualEffectView上,设置为混合模式Behind Window,材质Light和外观Vibrant Light以及setWantsLayer设置为true。
我感觉我对基于图层的NSVisualEffectViews和NSViews之间的合成交互缺少了一些东西。
我很感激你对可能导致错误渲染的原因的看法,因为我对Cocoa的复杂性还很新。谢谢!
我刚刚做了一个快速隔离的测试用例来演示这个问题。你可以clone it from here。
它还演示了一个带有alpha(角落指示符)而不是另一个(星号)的图像发生的问题
由于Daniel Chote(see tweet),解决方法是在所有组件上手动将背景颜色设置为透明。正如丹尼尔提到的那样,“可怕的解决方案”,但至少是解决方案:)
(请务必记住在抓住你的头之前打开Draws Background,看看为什么它仍无效。):)
如果有人有更好的解决方案,我会全力以赴。稍等一下,如果我什么都没听到,就会提出雷达。