1

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

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。像这样:

在此处输入图像描述

请注意,尝试使用其他复合类型仍然会导致同样的问题。

我已经阅读了很多关于 NSViews 不是用于“分层”的信息,但我不确定这是否与此处相关。到目前为止,我一直在使用 Core Graphics 在 NSView 上进行很好的绘图,并且透明部分暴露了“后面”的层。只有在尝试合成此图像时才会出现此问题。

我很感激任何关于为什么会发生这种情况以及解决它的可能方法的指示。

4

1 回答 1

-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 不是用于“分层”的信息,但我不确定这是否与此处相关。

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

于 2011-01-28T14:30:05.840 回答