如何去除可可添加到透明工作表的“模糊”效果?

问题描述:

默认情况下,Cocoa在将透明和半透明模态图应用于窗口时将背景模糊效果添加到透明和半透明模态图。我想禁用模糊效果。我该怎么去做呢?如何去除可可添加到透明工作表的“模糊”效果?

我已创建自定义片材(NSWindow的在它的透明背景和一些控制的子类)。我能够使用标准的方法beginSheet如下进行显示:

[NSApp beginSheet:myCustomSheet 
    modalForWindow:mainWindow 
    modalDelegate:self 
    didEndSelector:...]; 

的片材显示细腻,但一切它后面是模糊。

注1:我写了一个触摸屏/亭类型的应用程序完全自定义的用户界面,所以没有通常的苹果用户界面指南适用。

注2:希望看到什么是在表下。正如SirRatty指出的那样,可以通过填充背景来遮挡模糊部分。在我的情况下,我希望通过背景来展示,而不是显得模糊。

+0

我有模糊的怀疑,我会尝试以后再看,但仅供参考,我有强烈的感觉,这将涉及无证私人功能。 – Chuck 2010-08-06 02:10:34

我所做的:

在IB,添加一个窗口大小的自定义的NSView的窗口,在内容视图层次的底部。设置对象的类为MySolidView(或其他)。

在Xcode中,MySolidView类只做一件事:on -drawRect它会用纯色填充视图。 (例如浅灰色)。

+0

我假设你正在讨论将该消隐视图添加到表单中,以阻止它下面的所有内容,从而消除模糊效果?如果是这样,这是一个合理的解决方案,但我确实希望让背景显示。只是没有模糊。我很挑剔':)' – 2010-08-06 03:38:43

+0

哦,对不起,我的坏。 在这种情况下,我帮不了你。我不知道有什么办法来关闭模糊(我认为这是CoreImage效果)。 – SirRatty 2010-08-06 03:39:51

+0

它绝对看起来好像它不能在AppKit的内部工作环境中不被修改。不过,感谢您花时间回答。我应该在问题上更清楚一些。 – 2010-08-06 03:59:48

有可用于设置窗口的背景CI滤波器的私人API调用:

http://www.mail-archive.com/[email protected]/msg16280.html

还有一个CGSRemoveWindowFilter

extern CGError CGSRemoveWindowFilter(CGSConnectionID cid, CGSWindowID wid, CGSWindowFilterRef filter);

只是要意识到通常的私有API警告(可能会在未来消失或更改等)。

您可以编写自己的表单动画例程来显示您自己的NSWindow,并使用半透明颜色填充窗口背景。我不确定是否setAlphaValue:对于NSWindow也会影响子元素的不透明度。如果它确实影响它们,则可以使用setBackgroundColor:并提供默认的窗口背景颜色,但使用alpha组件,这不应该影响子元素。

我想开发/设计自己的用户界面的一个问题是,当你不得不重新实现*只是为了一个小的定制。至少,如果你自己写,你将在未来对其定制有更多的控制权。