嵌套的GLKView和GLKViewController

时间:2011-11-23 15:15:24

标签: objective-c ios glkit

我是OpenGL ES的新手,我正在尝试使用GLKit。我的目标是开发一个非常简单的应用程序,以获得对OpenGL的良好感觉。

我从Apple的示例代码(OpenGL ES游戏)开始,我实现了基本的手势控制:平移,缩放,旋转(轨迹球算法)。

现在已经完成了,我想玩不同的投影矩阵,我开始设计一个用户界面来做到这一点:

http://tof.canardpc.com/view/7e0fc0da-9c63-489c-a1f1-eb6475dd3809.jpg

唯一的问题是当GLKViewController中的顶视图不是GLKView时它不起作用。

是否可以将GLKView作为子视图并仍然保留GLKViewController的很酷功能?

谢谢。

2 个答案:

答案 0 :(得分:5)

好的,我找到了答案。

图片中的“OpenGL View Controller”必须是普通的UIViewController。对此视图控制器进行子类化,并在viewDidLoad中,以编程方式创建OpenGL视图控制器:

- (void)viewDidLoad
{
    [super viewDidLoad];

    _openGLViewController = [[FZIOpenGLViewController alloc] initWithNibName:@"FZIOpenGLView" bundle:nil];

    _openGLViewController.view.frame = _openGLView.frame;

    [self.view addSubview:_openGLViewController.view];

}

在此代码中,_openGLView是一个IBOutlet,表示图片中的“GLKit View”。它基本上只是为了获得正确的尺寸。

_openGLViewController是您处理OpenGL所有内容的GLKViewController子类。 .xib文件FZIOpenGLView.xib只是一个带有相应文件所有者(FZIOpenGLViewController)的GLKView。

有效:

result http://tof.canardpc.com/view/e06a0d8b-0d58-4cc9-965c-00e6ddefd519.jpg

答案 1 :(得分:0)

而不是未使用的openGLView(并且只占用内存),而不是 可以使用主视图尺寸:

_openGLViewController.view.frame = self.view.frame; // instead of _openGLView.frame