如何在我的UIView和我的EAGLView之间进行混合?
题
我在EAGLView图层上有一个opengl场景渲染,还有一些其他元素(圆圈等)渲染在UIView上(它是EAGLView的兄弟,位于它上面)。是否可以在两层之间混合颜色?我想做一些差异混合,以获得EAGLView颜色的反转效果。
我一直在玩CGBlendMode,但它似乎只会影响我在当前视图中绘制的内容。我认为这与CGContext有关,但我对细节有点朦胧,我可以强制UIView和EAGLView使用相同的CGContext,以便它们之间的混合工作吗?
帮助,更正,澄清都表示赞赏。提前致谢, -S
解决方案
简短的回答是你做不到的。接下来是答案。
通过 EAGLView
,你必须指的是Xcode中的OpenGL ES模板中包含的 UIView
的子类。这个类的特殊之处在于, layerClass
类方法被覆盖并返回 CAEAGLLayer
类而不是 CALayer
类,这是默认的。 / p>
UIView
和 CALayer
成对工作。所有 UIView
对象都由 CALayer
支持, CALayer
是负责布局和渲染到屏幕的对象。 UIView
是 CALayer
的委托,负责在需要时绘制图形。
CALayer
会让它的委托( UIView
)绘制成 CGContextRef
。每个 UIView
是一个上下文,因此您不能使用 CGBlendMode
来混合多个视图,因为它只能在一个单独的UIView上下文中运行。
应使用过滤器属性完成 CALayer
的混合。这些是为iPhone OS定义的,但根据文档,可用的过滤器是 undefined 。这是因为此时iPhone OS上没有Core Image。
其他提示
我认为你不能在这个意义上混合颜色。您可以做的最好的是让一个完全遮挡另一个,或者使顶层半透明(在这种情况下,您将看到下面的部分) - 但您将无法进行XOR类型绘制。