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