我正在学习iOS的OpenGL ES,并在线学习Ray Wenderlich的教程。他所做的第一件事是使用OpenGL ES 2.0将视图控制器中的视图设置为不同的颜色。所以我创建了一个名为OpenGLView的自定义类,它负责更改屏幕的颜色。然后在主要故事板中我删除了视图控制器中的原始视图,并将其替换为GLKView并将其类设置为OpenGLView。当我运行项目时,一切正常。但是现在我试图做同样的事情,除了GLKView在UIView中。如下所示
当我将GL视图的类设置为主故事板中的自定义类OpenGlView时,除了类之外,它不会。当我运行项目时,我看到的只是一个白色的屏幕。
如何将GL视图设置为OpenGLView类?
编辑:
我相信它与app delegate中的代码有关。
@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;
}
答案 0 :(得分:2)
您的代码在app delegate中创建一个glView,并将其添加为根窗口的子视图;之后,通过故事板实例化视图控制器,并将其视图添加到堆栈中。最后一个视图是您看到的白色视图,它涵盖了glView。 为了更好地理解这种层次结构,您可以使用Xcode Debug View Hierarchy功能。 要解决您的问题,您可以删除视图控制器或将glView作为视图控制器的子视图移动。
修改强>
如果您通过故事板创建OpenGLView,则使用initWithCoder
而不是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;
}