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

时间:2013-01-03 23:28:19

标签: objective-c ios xcode uiview calayer

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

我知道CALayercompositingFilter的属性,我知道它在iOS中不起作用。我已经搜索了很多解决方案,我发现了如何将UIView作为子类并覆盖drawRect

我尝试将drawRect中的上下文设置为屏幕混合模式,尽管它仍会正常绘制每一个图像。也许我做错了什么,或者方法应该是不同的。也许我需要OpenGL或CALayer来实现这一目标。有人可以帮忙吗?

1 个答案:

答案 0 :(得分:17)

不幸的是,在iOS上的UIViews之间无法进行非复合混合。 UIKit没有提供功能,你已经注意到了,CALayer也做不到。

通常,在UIView中实现-drawRect对你没有帮助。你正在绘制一个空的位图 - 它不包含它背后的视图位,因为它们可能随时改变(任何视图或图层都可能被动画化)。 CA从根本上假设图层的内容应该彼此独立。

可以尝试在-drawRect:

中尝试
  1. 创建图像上下文
  2. 使用-[CALayer renderInContext:]为每个
  3. 捕获视图下的视图
  4. 从图片上下文创建图片
  5. 将该图片绘制到您的视图中
  6. 设置混合模式并在
  7. 之上绘制

    但是这将是缓慢而脆弱的,如果您为任何视图制作动画,它将无法工作。我不推荐它。

    如果你真的需要这样做,你将不得不将整个场景切换为使用OpenGL进行渲染,where you've got more freedom