【问题标题】:Applying CALayer compositingFilter correctly on OS X?在 OS X 上正确应用 CALayer compositingFilter?
【发布时间】:2014-07-04 15:18:00
【问题描述】:

我有一个 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 如何使用混合模式将一堆图层合成在一起?

附:我正在使用委托方法-drawLayer:inContext: 绘制每一层的contents

【问题讨论】:

  • 你没有错。输入图像自动设置。不应该什么时候设置过滤器?之后你会调用 setNeedsDisplay 吗?您是否尝试将图像设置为内容?我发现有帮助的是在将其添加到图层之前将setDefaults 发送到过滤器。

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


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-07-29
    • 2016-12-11
    • 1970-01-01
    • 2012-03-22
    • 2011-10-03
    • 1970-01-01
    • 2016-06-08
    • 1970-01-01
    相关资源
    最近更新 更多