2011-01-28 151 views
1

所有NSViews我在Cocoa應用程序3個NSViews,其它的每個子視圖。繪製透明NSImage中使得透明

FirstNSView - > SecondNSView - > ThirdNSView

FirstNSView繪製使用核心圖形固體背景填充。

SecondNSView爲許多其它視圖的容器圖。

ThirdNSView繪製一個NSImage中到使用以下代碼其幀在drawRect

[img drawAtPoint:NSMakePoint(0, 0) fromRect:NSMakeRect(0, 0, img.size.width, img.size.height) operation:NSCompositeDestinationAtop fraction:1.0];

我使用NSCompositeDestinationAtop,因爲它允許圖像幾乎充當的img非透明區域的掩模。

然而,img透明區域,使整個窗口透明,而不是顯示通過對FirstNSView因爲我期望的那樣。像這樣:

enter image description here

注意,與其他複合類型的實驗仍然導致同樣的問題。

我有很多瞭解NSViews不意味着「分層」,但我不能確定這是與此有關。到目前爲止,我已經很好地使用核心圖形繪製到NSView上,並且透明部分暴露了「後面」圖層。只是試圖合成這個圖像,這個問題已經出現。

我會很感激任何指針,爲什麼發生這種情況,解決它的一個可行的辦法。

回答

-1
[img drawAtPoint:NSMakePoint(0, 0) fromRect:NSMakeRect(0, 0, img.size.width, img.size.height) operation:NSCompositeDestinationAtop fraction:1.0]; 

我使用NSCompositeDestinationAtop,因爲它允許圖像幾乎充當的img非透明區域的掩模。

哪個形象?如果你想用img的alpha通道作爲掩碼,那就是NSCompositeSourceOver

DestinationAtop是當你想要的形象窗下出現,所以你應該通過在窗口中的任何已經透明區域看到圖像。

但是,img的透明區域使整個窗口透明,而不是像我期望的那樣向FirstNSView顯示。像這樣:

[畫面]

我不能告訴從截圖什麼。它看起來像一堆隨機的彩色形狀給我。

我已經讀了很多關於NSViews不是爲了'分層'的意思,但我不確定這是否與這裏相關。

不是。重疊兄弟意見造成問題。

+0

截圖中的紫色是我的桌面。正如你所看到的,紫色是在合成圖像的灰色箭頭下。不,我不想要NSCompositeSourceOver - 它會導致http://i.imgur.com/LZgxk.png。我想要的效果與我的原始圖片一樣,但沒有像現在這樣呈現桌面。 – JoeR 2011-01-28 14:41:25