在iOS中使用混合模式堆叠UIViews

我有两个不同的UIImageViews 。 我想使顶部UIImageView混合使用屏幕混合模式与底部UIImageView

我知道CALayer的属性: compositingFilter ,我知道它不适用于iOS。 我已经search了很多的解决scheme,我已经find了如何UIView并覆盖drawRect

我试图将drawRect的上下文设置为屏幕混合模式,尽pipe它仍然正常绘制每一个图像。 也许我做错了什么,或者做法不一样。 也许我需要OpenGL或CALayer来实现这一点。 有人可以帮忙吗?

不幸的是,在iOS上的UIViews之间没有办法做一个非复合的混合。 UIKit不提供这些function,而且您已经注意到,CALayer也无法做到这一点。

一般来说,在UIView中实现-drawRect不会帮助你。 你正在绘制一个空的位图 – 它不包含它后面的视图的位,因为它们可能随时改变(任何视图或图层可能是animation的)。 CA从根本上假定图层的内容应该是彼此独立的。

可以尝试,在你的-drawRect:

  1. 创build一个图像上下文
  2. 在每个视图下使用-[CALayer renderInContext:]捕获视图下的视图
  3. 从图像上下文创build一个图像
  4. 将该图像绘制到您的视图中
  5. 设置混合模式并在其上绘制

但是,这将是缓慢和脆弱的,如果你animation的任何意见,将不会工作。 我不会推荐它。

如果你真的需要这样做,你将不得不把整个场景切换到使用OpenGL进行渲染, 在那里你有更多的自由 。