【发布时间】: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];
-
我很确定我在最后一天左右看到了另一个关于那个问题的问题(相对于动画层的层问题)