问题
I'm new to OpenGL ES and I'm experimenting with GLKit. My goal is to develop a very simple app just to get a good feel of OpenGL.
I started with Apple's sample code (OpenGL ES game) and I implemented basic gesture controls: panning, zooming, rotating (trackball algorithm).
Now that this is done, I wanted to play with the different projection matrices and I started to design a user interface to do just that:
(source: canardpc.com)
The only problem is that it doesn't work when the top view in a GLKViewController isn't a GLKView.
Is it possible to have a GLKView as a subview and still retain the cool features of GLKViewController?
Thank you.
回答1:
Ok so I found the answer.
The "OpenGL View Controller" in the picture must be a normal UIViewController. Subclass this view controller and in the viewDidLoad, create programmatically your OpenGL View Controller:
- (void)viewDidLoad
{
[super viewDidLoad];
_openGLViewController = [[FZIOpenGLViewController alloc] initWithNibName:@"FZIOpenGLView" bundle:nil];
_openGLViewController.view.frame = _openGLView.frame;
[self.view addSubview:_openGLViewController.view];
}
In this code, _openGLView is an IBOutlet representing "GLKit View" in the picture. It's basically just there to get the right dimensions.
_openGLViewController is your GLKViewController subclass that handles everything OpenGL. The .xib file FZIOpenGLView.xib is just a GLKView with the appropriate File Owner (FZIOpenGLViewController).
It works:
(source: canardpc.com)
回答2:
Instead of the openGLView that is not used (and just takes up memory), you can use the main view dimensions:
_openGLViewController.view.frame = self.view.frame; // instead of _openGLView.frame
来源:https://stackoverflow.com/questions/8244525/nested-glkview-and-glkviewcontroller