2010-08-06 19 views
2

默認情況下,Cocoa在將透明和半透明模態圖應用於窗口時將背景模糊效果添加到透明和半透明模態圖。我想禁用模糊效果。我該怎麼去做呢?如何去除可可添加到透明工作表的「模糊」效果?

我已創建自定義片材(NSWindow的在它的透明背景和一些控制的子類)。我能夠使用標準的方法beginSheet如下進行顯示:

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

的片材顯示細膩,但一切它後面是模糊。

注1:我寫了一個觸摸屏/亭類型的應用程序完全自定義的用戶界面,所以沒有通常的蘋果用戶界面指南適用。

注2:希望看到什麼是在表下。正如SirRatty指出的那樣,可以通過填充背景來遮擋模糊部分。在我的情況下,我希望通過背景來展示,而不是顯得模糊。

+0

我有模糊的懷疑,我會嘗試以後再看,但僅供參考,我有強烈的感覺,這將涉及無證私人功能。 – Chuck 2010-08-06 02:10:34

回答

1

我所做的:

在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

6

有可用於設置窗口的背景CI濾波器的私人API調用:

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

還有一個CGSRemoveWindowFilter

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

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

1

您可以編寫自己的表單動畫例程來顯示您自己的NSWindow,並使用半透明顏色填充窗口背景。我不確定是否setAlphaValue:對於NSWindow也會影響子元素的不透明度。如果它確實影響它們,則可以使用setBackgroundColor:並提供默認的窗口背景顏色,但使用alpha組件,這不應該影響子元素。

我想開發/設計自己的用戶界面的一個問題是,當你不得不重新實現輪子只是爲了一個小的定製。至少,如果你自己寫,你將在未來對其定製有更多的控制權。