2012-04-02 18 views
2

我尝试建立一个基于模板“OpenGL Game”的Xcode项目。 该示例的StoryBoard包含一个GLKViewController和一个GLKView。iOS OpenGL游戏,两个GLKViews/GLKViewControllers

我想有:

  • 一个GLKView填充另一半的半个屏幕
  • 一个GLKView填充部两个GLKViews绘制
  • 不同的东西

问题: - 使用StoryBoard时,我似乎无法将两个GLKViews放到屏幕上 - 使用NIB文件时无法使GLKViews正常工作

我想知道两种方法中的任何一种是否可行,以及最佳的处理方式是什么。

即使在NIB文件中只设置一个GLKView和GLKViewController,似乎既不调用方法update:也不调用GLKViewController的glkView:drawInRect:。

如何将两个GLKViews放入iPad应用程序到同一屏幕?

编辑:对不准确。

基本上是我想做的事:

  • 我想写一个使用一个屏幕
  • 在屏幕的一半,我想一个视图中,我得出的OpenGL
  • 于一体的应用季度我想另一个View中,我得出不同的OpenGL
  • 在剩下的应该有一些按钮

我使用的Xcode 4.2 FO ř的iOS 5.1为iPad

第一种方法,使用一个故事板:

  • 我只能将一个大GLKView其中i的绘制OpenGL中,没有独立的其他GLKView
  • 在于GLKView的示例的OpenGL代码(使用GLKViewController)虽然工作正常。

第二条本办法,删除故事板,并创建一个NIB文件:

  • 我可以把一个GLKView到一个窗口,一个GLKViewController子类在它旁边,并将其链接到GtkView,但有没有画在其中
  • 我可以将第二个GLKView放置到窗口中,旁边有一个不同的GLKViewController子类,但在两个GLKView中都没有任何绘制。
  • 我使用了在StoryBoard中正常工作的GLKView/GLKViewController示例。

任何方式对我来说都没问题,目前没有任何工作。

感谢您的任何提示, Torsten。

求助: 我现在使用NIB文件,并且我添加了GLKViewController/GLKView的PRECONFIGURED组合。 只需放置一个UIView和一个UIViewController,然后更改它们的类型不起作用。

+0

你看到了什么样的问题?你不能在物理上放置这些东西,你的代码与他们的连接似乎不起作用,你可以绘制到每个视图,但不知何故不正确,或者其他的东西? – Tommy 2012-04-02 21:57:18

回答

2

我遇到了同样的问题最近,但只有2 GLKViews而不是3

最后我做这一切编程,因为故事板方法似乎并没有对这个足够强大。

我所做的是创建一个“主”GLKViewController,将容纳我所有的其他GLKViews/GLKViewControllers。

然后,我们添加子类别GLKViewControllers及其后续视图。

我发现的棘手部分是我需要添加ViewControllers作为一个孩子,以及将他们的视图作为一个孩子添加到“主”视图。

GLKViewController master = [[GLKViewController alloc] initWithNibName:nil bundle:nil]; 

    GLKView *masterView = (GLKView *)master.view; 
    masterView.context = context; 

    master.view = masterView; 

    /* I created a constructor with a parameter to identify dimensions and position for rendering */ 
    GLKViewController *child1 = [[SubclassGLKViewController alloc] initWithNibName:nil bundle:nil]; 

    GLKView *child1View = (GLKView *)child1.view; 
    child1View.context = context; 

    child1.view = child1View; 

    GLKViewController *child2 = [[SubclassGLKViewController alloc] initWithNibName:nil bundle:nil]; 

    GLKView *child2View = (GLKView *)child2.view; 
    child2View.context = context; 

    child2.view = child2View;  

    /*It seems all three of these steps are needed*/ 
    [master addChildViewController:child1]; 
    [child1 didMoveToParentViewController:master]; 

    [master.view addSubview:child1View]; 

我不得不做的另一件事是在我的GLKViewController子类中实现viewDidAppear。

-(void)viewDidAppear:(BOOL)animated { 
    [super viewDidAppear:animated]; 

    if(some condition is met) 
     change frame size to something 
    else 
     change frame size to something else 

    self.view.frame = frame; 
} 

希望这会有所帮助。

+0

在第6行,应该说'master.view = masterView'? – Olie 2013-05-18 19:41:55

+0

@是的,它可能应该。 – zznq 2013-09-18 17:54:55