NSView子视图混合?

问题描述

有没有办法让一个视图的子视图使用特定的混合模式绘制,例如你可以使用 CALayer ?

我尝试了对我来说最明显的两种方法:

  1. 将 CIFilter 添加到子视图的层
  2. 在子视图的绘制函数中设置当前上下文的混合模式,如
let context = NSGraphicsContext.current!.cgContext
context.setBlendMode(.colorDodge)
//usual subview drawing stuff

但这两种方法似乎都不会影响底层视图,即。它们只能在同一个子视图中混合。

作为后备,非常不优雅的方法,我意识到您可以在其他所有内容之上叠加第三个子视图,获取对所有其他子视图的引用,然后在叠加视图中重新绘制所有内容,如

let context = NSGraphicsContext.current!.cgContext
fullyOpaqueBackgroundSubview.layer!.draw(in: context)
context.setBlendMode(.colorDodge)
subviewA.layer!.draw(in: context)
context.setBlendMode(.colorBurn)
subviewB.layer!.draw(in: context)

但我相信一定有一种不那么无知的方法来做到这一点。 ...有一个,对吧?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)