如何正确地在Mac OS X上应用CALayer的合成滤镜?

3
我有一个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"];

我认为输入图像和背景图像会自动提供每个图层的内容,但也许我错了。是吗?

TL;DR: 初学者如何使用混合模式将一堆图层组合在一起?

P.S. 我正在使用委托方法-drawLayer:inContext:绘制每个图层的内容


你说得没错。输入图像被自动设置了。那么你什么时候设定滤镜呢?之后你会调用setNeedsDisplay吗?你尝试过将图像设置为内容吗?我发现在将滤镜添加到图层之前向其发送“setDefaults”的方法可以有所帮助。 - mahal tertin
1个回答

1

有一个标志需要在NSView上启用,以便在图层上使用过滤器:

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

我认为这是特定于OS X和NSView,并且在iOS上的UIView上不需要。其他所有内容看起来都是正确的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接