堆叠在iOS的混合模式UIViews(Stacking UIViews with blend mod

2019-07-17 20:17发布

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

我知道的属性CALayercompositingFilter ,我知道它不会在iOS的工作。 我搜索了很多的解决方案,我发现一个人应该如何继承UIView并重写drawRect

我试着在设置上下文drawRect屏幕混合模式,但它仍然吸引了图像的每一个正常。 也许我做错了什么,或者方法应该是不同的。 也许我需要OpenGL或CALayer的实现这一目标。 可能有人帮助?

Answer 1:

不幸的是没有办法做到在iOS UIViews之间的非复合的共混物。 UIKit中没有提供的功能,并且你已经注意到,CALayer的不能做,要么。

一般来说,在一个UIView实施-drawRect不会帮你。 您正在绘制到一个空的位图 - 它不包含它背后的意见位,因为这些可能会随时更改(任何视图或层可能被动画)。 CA根本假定层的内容应该是相互独立的。

可以试试,你-drawRect:

  1. 创建图像上下文
  2. 拍摄使用您的视图下的观点-[CALayer renderInContext:]每个
  3. 从该映像创建上下文的图像
  4. 绘制图像到您的看法
  5. 设置混合模式,借鉴最重要的是

但是,这将是缓慢和脆弱的,如果你的任何动画的意见将无法正常工作。 我不会推荐它。

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



文章来源: Stacking UIViews with blend modes in iOS