2

我想用 OpenGL 做一些简单的图像处理,所以我从GLKView. 因为我不需要每隔几秒刷新一次视图,所以我没有使用GLKViewController,而是使用了一个普通的UIViewController子类。

我的问题是,我是简单地将 viewController 的视图设置为 aGLKView还是将其添加GLKView为视图控制器视图的子视图。由于我UISlider也在视图中添加了一个,我认为后者似乎更好,但我不确定。在某些情况下,我还需要调用setNeedsDisplayGLKView。

4

1 回答 1

8

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

如果您将 glkview 放在另一个视图中,则应将其设置为包含。在你的情况下,你应该有一个普通的 UIView 和一个普通的 UIViewController,然后添加 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 包含的苹果文档和 GLKit 的文档

于 2012-09-12T02:45:09.480 回答