在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:
- 创build一个图像上下文
- 在每个视图下使用
-[CALayer renderInContext:]
捕获视图下的视图 - 从图像上下文创build一个图像
- 将该图像绘制到您的视图中
- 设置混合模式并在其上绘制
但是,这将是缓慢和脆弱的,如果你animation的任何意见,将不会工作。 我不会推荐它。
如果你真的需要这样做,你将不得不把整个场景切换到使用OpenGL进行渲染, 在那里你有更多的自由 。