3

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

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

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

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

注意 1:我正在为触摸屏/信息亭类型的应用程序编写一个完全定制的用户界面,因此通常的 Apple 用户界面指南都不适用。

注2:确实想看看床单下面有什么。正如SirRatty指出的那样,可以通过填充背景来遮挡模糊部分。就我而言,我想让背景显示出来,而不会显得模糊。

4

3 回答 3

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 警告适用(将来可能会消失或更改等)。

于 2010-08-06T04:24:40.887 回答
1

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

我想开发/设计您自己的用户界面的问题之一是您必须重新实现轮子只是为了进行小的定制。至少,如果您自己编写它,将来您将对它的定制有更多的控制权。

于 2010-08-06T04:34:52.970 回答
1

我做了什么:

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

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

于 2010-08-06T03:10:54.340 回答