在OS X上正确应用CALayer compositingFilter?

时间:2014-05-16 00:15:12

标签: objective-c macos core-animation calayer cifilter

我有一个NSView。它有一层。在图层内部,有几个子图层。其中一个子层需要与其下面的层混合。我设置了顶层的compositingFilter属性,但没有发生混合。 :-(

这是一个直观的表示:

Root Layer      <-- myView.layer
|- Bottom Layer <-- myView.layer.sublayers[0]
|- Middle Layer <-- myView.layer.sublayers[1]
|- Top Layer    <-- myView.layer.sublayers[2]

Root Layer
|- Bottom Layer
|- Middle Layer
|- Top Layer    <-- Added filter to this layer.

我设置了这样的属性:

self.topLayer.compositingFilter = [CIFilter filterWithName:@"CIMultiplyBlendMode"];

我假设输入图像和背景图像将自动提供每个图层的contents,但也许我错了。我呢?

TL; DR:n00b如何使用混合模式将一叠图层组合在一起?

P.S。我使用委托方法contents绘制每个图层的-drawLayer:inContext:

1 个答案:

答案 0 :(得分:1)

您必须在NSView上启用一个标志,因为它在图层上使用过滤器:

[self.view setWantsLayer:YES];
[self.view setLayerUsesCoreImageFilters:YES];

我认为这是针对OS X和NSView的,并且对于iOS上的UIView不是必需的。其他一切对我来说都是正确的。