如何删除Cocoa添加到透明纸张的“模糊”效果?

时间:2010-08-06 00:42:57

标签: objective-c cocoa transparency nswindow cocoa-sheet

默认情况下,Cocoa在应用于窗口时会向透明和半透明模态图纸添加背景模糊效果。我想禁用模糊效果。我该怎么做呢?

我创建了一个自定义工作表(NSWindow的子类,具有透明背景和一些控件)。我能够使用标准beginSheet方法显示它,如下所示:

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

工作表显示正常,但背后的一切都很模糊。

注1:我正在为触摸屏/自助服务终端类应用编写一个完全自定义的用户界面,因此没有适用的常用Apple用户界面指南。

注2:想要查看表单下面的内容。正如SirRatty指出的那样,可以通过填充背景来阻挡模糊部分。在我的情况下,我希望通过显示背景,只是没有显得模糊。

3 个答案:

答案 0 :(得分:6)

有一个私有API调用,可用于在窗口背景上设置CI过滤器:

http://www.mail-archive.com/cocoa-dev@lists.apple.com/msg16280.html

还有CGSRemoveWindowFilter

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

请注意,通常的私有API警告适用(可能会在将来消失或改变等)。

答案 1 :(得分:1)

我做了什么:

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

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

答案 2 :(得分:1)

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

我认为开发/设计自己的用户界面的一个问题是当你必须重新实现轮子只是为了进行一些小的定制。至少,如果您自己编写,将来可以更好地控制其自定义。