绘制透明的NSImage使所有NSView都透明

时间:2011-01-28 13:03:58

标签: cocoa core-graphics nsview nsimage

我在Cocoa应用程序中有三个NSView,另一个是子视图。

FirstNSView - > SecondNSView - > ThirdNSView

FirstNSView使用核心图形绘制纯色背景填充。

SecondNSView是许多其他视图的容器视图。

ThirdNSView使用drawRect中的以下代码将NSImage绘制到其框架中:

[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不是用于“分层”的内容,但我不确定这是否与此相关。到目前为止,我一直很好地使用Core Graphics绘制到NSView上,而透明部分则将图层暴露在“后面”。只有在试图合成这个图像时才会出现这个问题。

我很感激为什么会发生这种情况以及解决问题的可行方法。

1 个答案:

答案 0 :(得分:-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不是用于“分层”的内容,但我不确定这是否与此相关。

不是。重叠兄弟视图会导致问题。