Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cocoa:NSVisualEffectView上组件的背景在将层支持的NSView阴影添加到NSWindow’;s内容视图_Cocoa_Transparency_Calayer_Nsvisualeffectview - Fatal编程技术网

Cocoa:NSVisualEffectView上组件的背景在将层支持的NSView阴影添加到NSWindow’;s内容视图

Cocoa:NSVisualEffectView上组件的背景在将层支持的NSView阴影添加到NSWindow’;s内容视图,cocoa,transparency,calayer,nsvisualeffectview,Cocoa,Transparency,Calayer,Nsvisualeffectview,我有一个半透明的NSView,我用它来遮住主窗口,而模式窗口在我的Cocoa应用程序(OS X Yosemite)中显示为一张纸 有关独立的示例项目,请参见下面的更新部分。 阴影可以正确显示,但当它覆盖视图层次结构中较低的其他组件时,这些组件的背景将变得可见并以半透明的方式渲染(同时它们应保持完全透明) 在上面的屏幕截图中,您可以看到阴影覆盖了进度指示器(小正方形)和半个NSTextField(标签)。板材覆盖的一半与背景渲染不正确;另一半是正常渲染的 视图层次结构下方的组件位于NSVisual

我有一个半透明的NSView,我用它来遮住主窗口,而模式窗口在我的Cocoa应用程序(OS X Yosemite)中显示为一张纸

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

阴影可以正确显示,但当它覆盖视图层次结构中较低的其他组件时,这些组件的背景将变得可见并以半透明的方式渲染(同时它们应保持完全透明)

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

视图层次结构下方的组件位于NSVisualEffectView上,该视图设置为窗口、材质灯光和外观振动灯光后的混合模式,且setWantsLayer设置为true

我感觉在基于层的NSVisualEffectView和NSView之间的合成交互中,我缺少了一些东西

我非常感谢您对可能导致错误渲染的原因的思考,因为我对复杂的Cocoa仍然非常陌生。谢谢

更新 我只是做了一个快速的独立测试用例来演示这个问题。你可以

它还演示了在一张图像中使用alpha(角指示器)而不是另一张图像(星形)时出现的问题

变通办法 多亏了(),解决方法是在所有组件上手动将背景颜色设置为透明。正如丹尼尔提到的,“可怕的解决方案”,但至少是一个解决方案:)

(在搔你的头之前,一定要记得打开背景画,看看为什么它仍然不起作用。):)

如果有谁有更好的解决办法,我洗耳恭听。我会等一等,如果我什么也没听到,我会打雷达