【问题标题】:Inserting an OpenGL layer in front of a UIView with controls在带有控件的 UIView 前面插入 OpenGL 层
【发布时间】:2013-04-30 23:25:35
【问题描述】:

我正在尝试在包含控件的 UIView 前面使用 OpenGLES 动画层。例如,我想在 UIButton 的 FRONT 中渲染动画(因此动画对象在通过时从视图中传递(遮挡)按钮的前面)。

尽管有几个相关的线程,但仍无法找到答案。

我的主视图控制器中有一个视图,类型为 GLKView。我有一个单独的 xib (View.xib),其中包含一个 UIView 和一个 UIButton。

在我的 viewDidLoad 中,我有:

self.context = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2];

if (!self.context) {
    NSLog(@"Failed to create ES context");
}

GLKView *glView = (GLKView *)self.view;
glView.context = self.context;
glView.drawableDepthFormat = GLKViewDrawableColorFormatRGB565;
glView.opaque = NO;
glView.alpha = 1.0;
glView.backgroundColor = [UIColor clearColor];

UIView *controlView = [[[NSBundle mainBundle]loadNibNamed:@"View" owner:self options:nil] objectAtIndex:0];
controlView.frame = CGRectMake(100,200,100,100);

controlView.backgroundColor = [UIColor greenColor];
controlView.alpha = 1;
controlView.opaque = YES;

CALayer *controlViewLayer = controlView.layer;
[controlViewLayer insertSublayer:glView.layer above:controlViewLayer];

[self setupGL];

drawInRect 我有: glClearColor(0,0,0,0);

结果是我的 GLKView 动画以黑色/清晰的背景呈现,但我看不到包含按钮的 UIView。

有什么想法吗? 谢谢, 戴夫

【问题讨论】:

  • 您的 EaglLayer 是否也设置为 opaque = NO?
  • 我验证了 glView.layer.opaque = NO;然而,这并没有什么区别......我仍然看到动画,但没有别的......
  • 怎么回事 controlView.opaque = YES,然后你的 glView.layer 被插入到那个视图的层?
  • 其实,不错的选择。我把viewDidLoad的最后一部分改成如下,出现了Button视图(controlViewLayer)。但是,它出现在动画层的前面,无论我选择将其插入 glView 上方还是下方: controlView.frame = CGRectMake(100,200,100,100); controlView.backgroundColor = [UIColor whiteColor]; controlView.alpha = 1.0; controlView.opaque = 否; CALayer *controlViewLayer = controlView.layer; [glView.layer insertSublayer:controlViewLayer below:self.view.layer];
  • 我很确定我在最后一天左右看到了另一个关于那个问题的问题(相对于动画层的层问题)

标签: ios opengl-es


【解决方案1】:

我能够完成这项工作。问题是在我的 GL 代码的其他地方(实际上是 71Squared 在标准 XCode 项目中为 Particle Emitter 提供的示例 XCode 项目),在 ES1Renderer.m 中调用了 glClearColor。该调用包含 1.0f 的 alpha 值。一旦我将它设置为 0.0f(就像代码中的其他地方一样),前 (EAGLView) 层就会像预期的那样变得透明。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-19
    • 1970-01-01
    • 1970-01-01
    • 2010-11-26
    相关资源
    最近更新 更多