首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >iOS OpenGL游戏,2 GLKViews / GLKViewControllers

iOS OpenGL游戏,2 GLKViews / GLKViewControllers
EN

Stack Overflow用户
提问于 2012-04-02 21:53:42
回答 1查看 3.4K关注 0票数 3

我试图建立一个基于模板"OpenGL游戏“的Xcode项目。这个例子有一个StoryBoard,它有一个GLKViewController和一个GLKView。

我想要:

  • one GLKView填充半屏
  • 1 GLKView填充另一半
  • 绘制的两幅GLKViews

中的不同东西

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

我想知道这两种方法中是否有任何一种是可行的,什么是最好的办法。

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

如何才能将两个GLKViews放在同一个屏幕上的iPad应用程序中呢?

编辑:对不起,不太准确。

基本上我想做的是:

  • 我想写一个应用程序,在一半的屏幕上使用一个屏幕的
  • ,我想要一个视图,在一个季度中绘制OpenGL
  • ,我想要另一个视图,在剩下的页面中绘制不同的OpenGL
  • ,应该有一些按钮

F 217

我将Xcode 4.2用于iOS 5.1,用于iPad

第一种方法是使用StoryBoard:

  • --我只能放置一个大的GLKView,在其中绘制OpenGL,没有独立的其他GLKView
  • --不过,GLKView中的示例OpenGL代码(使用GLKViewController)工作得很好。

第二种方法,删除StoryBoard并创建一个NIB文件:

  • i可以将一个GLKView放在一个窗口中,一个GLKViewController --它旁边的子类--并将它链接到GtkView,但是没有绘制的东西--
  • ,我可以在窗口中放置第二个GLKView,在它旁边放置一个不同的GLKViewController--子类,但是在GLKView中没有任何东西。在StoryBoard中,
  • 使用了很好的GLKView/GLKViewController示例。

不管怎么说,我都不会有事的,现在没有办法了。

谢谢你的暗示,托尔斯顿。

解决方案:我现在使用一个NIB文件,并添加了一个预先配置好的GLKViewController / GLKView组合。仅仅放置一个UIView和一个UIViewController,然后更改它们的类型是行不通的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-05-27 18:47:09

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

最后,我以编程的方式完成了这一切,因为故事板方法似乎不够健壮。

我所做的就是创建一个“主”GLKViewController,它可以容纳我所有的其他GLKViews/GLKViewController。

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

我发现的棘手部分是,我需要将ViewControllers作为子视图添加,并将它们作为子视图添加到“主”视图中。

代码语言:javascript
复制
    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];

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

代码语言:javascript
复制
-(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;
}

希望这能有所帮助。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9984389

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档