17

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

CALayer我知道:的属性,compositingFilter并且我知道它在 iOS 中不起作用。我已经搜索了很多解决方案,并且发现了应该如何子类化UIView和覆盖drawRect.

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

4

1 回答 1

17

不幸的是,没有办法在 iOS 上的 UIView 之间进行非复合混合。UIKit 不提供该功能,并且您已经注意到,CALayer 也无法提供。

一般来说,在 UIView 中实现 -drawRect 对您没有帮助。您正在绘制一个空位图——它不包含其后面的视图位,因为这些位可能随时更改(任何视图或图层都可能是动画的)。CA 从根本上假设层的内容应该相互独立。

可以试试,在你的-drawRect:

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

但这将是缓慢而脆弱的,并且如果您为任何视图设置动画,则将无法正常工作。我不会推荐它。

如果你真的需要这样做,你将不得不切换你的整个场景以使用 OpenGL 进行渲染,这样你就有了更多的自由

于 2013-01-05T06:19:16.260 回答