我想使用OpenGL进行一些简单的图像处理,因此我从GLKView开始。由于我不需要每隔几秒钟刷新一次视图,因此我没有使用GLKViewController,而是使用了一个普通的UIViewController子类。

我的问题是,我只是将viewController的视图制作为GLKView还是将GLKView添加为视图控制器的视图的子视图。由于我还向视图添加了UISlider,因此我认为后者似乎更好,但我不确定。在某些情况下,我还需要在GLKView上调用setNeedsDisplay

最佳答案

对于渲染,您实际上应该在GLKViewController中使用GLKView。如果您担心不需要一直刷新,请在GLKViewController中使用self.paused = YES,这将停止渲染循环,而当您需要再次渲染时,只需执行self.paused = NO。

如果您在另一个视图中包含glkview,则应使用遏制功能对其进行设置。在您的情况下,您应该有一个带有普通UIViewController的普通UIView,然后向其中添加UISlider和GLKViewController(带有GLKView)。

完成此操作后,您可以在父控制器中进行常规视图操作,而opengl则是glk控制器。

一个简单的例子,设置您的父母,其中包含UISlider:

在父级的自定义UIViewController中

@interface ParentViewController () {
    ...
    UISlider *_slider; // this is your slider
    CustomGLKViewController *_myGlkViewController;
}

然后在viewDidLoad内部:
// assuming you're using a storyboard
UIStoryboard *myStoryboard = [UIStoryboard storyboardWithName:@"MainStoryboard"
                                                      bundle:[NSBundle mainBundle]];


// setup the opengl controller
// first get an instance from storyboard
_myGlkViewController = [myStoryboard instantiateViewControllerWithIdentifier:@"idForGlkViewController"];
// then add the glkview as the subview of the parent view
[self.view addSubview:_myGlkViewController.view];
// add the glkViewController as the child of self
[self addChildViewController:_myGlkViewController];
[_myGlkViewController didMoveToParentViewController:self];

// if you want to set the glkView to the same size as the parent view,
// or you can do stuff like this inside myGlkViewController
_myGlkViewController.view.frame = self.view.bounds;

但这只是一个帮助您入门的简单示例,您应该真正阅读ios5的UIViewController容器中的Apple文档和GLKit的文档。

07-24 09:46
查看更多