我在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。像这样:
请注意,尝试使用其他复合类型仍然会导致同样的问题。
我已经阅读了很多关于NSViews不是用于“分层”的内容,但我不确定这是否与此相关。到目前为止,我一直很好地使用Core Graphics绘制到NSView上,而透明部分则将图层暴露在“后面”。只有在试图合成这个图像时才会出现这个问题。
我很感激为什么会发生这种情况以及解决问题的可行方法。
答案 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不是用于“分层”的内容,但我不确定这是否与此相关。
不是。重叠兄弟视图会导致问题。