无法将自定义类设置为UIView内的GLKView

我正在学习iOS的OpenGL ES和在线学习Ray Wenderlich的教程。 他所做的第一件事是使用OpenGL ES 2.0将视图控制器中的视图设置为不同的颜色。 所以我创build了一个名为OpenGLView的自定义类,它负责改变屏幕的颜色。 然后在主故事板中,我删除了视图控制器中的原始视图,并将其replace为GLKView,并将其类设置为OpenGLView。 当我运行该项目一切工作正常。 但现在我试图做同样的,除了GLKView是在一个UIView。 如下所示

在这里输入图像说明

当我将GL视图的类设置为主故事板中的自定义类OpenGlView时,它不会除了类。 而当我运行这个项目时,我所看到的只是一个白色屏幕。

我如何将GL视图设置为OpenGLView类?

编辑:

我相信它在应用程序委托中有一些代码。

@interface AppDelegate : UIResponder <UIApplicationDelegate>{ OpenGLView* _glView; } @property (strong, nonatomic) UIWindow *window; @property (nonatomic, retain) IBOutlet OpenGLView *glView; @end //In the implementation @synthesize glView=_glView; - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // Override point for customization after application launch. CGRect screenBounds = [[UIScreen mainScreen] bounds]; self.glView = [[OpenGLView alloc] initWithFrame:screenBounds]; [self.window addSubview:_glView]; return YES; } 

您的代码在应用程序委托中创build一个glView,将其添加为根窗口的子视图; 之后,视图控制器通过故事板实例化,并将其视图添加到堆栈。 这最后一个视图是你看到的白色视图,它涵盖了glView。 为了更好地理解这种层次结构,可以使用Xcode Debug View Hierarchyfunction。 要解决您的问题,您可以删除视图控制器或将您的glView作为视图控制器的子视图。

编辑:如果您通过故事板创buildOpenGLView,则使用initWithFrame而不是initWithFrame 。 将下面的方法添加到OpenGLView.m中:

 - (id)initWithCoder:(NSCoder *)decoder { self = [super initWithCoder:decoder]; if (self) { [self setupLayer]; [self setupContext]; [self setupRenderBuffer]; [self setupFrameBuffer]; [self render]; } return self; }