xcode - iOS OpenGL 游戏,两个 GLKViews/GLKViewControllers

标签 xcode opengl-es storyboard

我尝试建立一个基于模板“OpenGL 游戏”的 Xcode 项目。 该示例有一个带有一个 GLKViewController 和一个 GLKView 的 StoryBoard。

我想要:

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

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

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

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

我怎样才能最好地将两个 GLKView 放入同一个屏幕上的 iPad 应用程序中?

编辑:抱歉不够精确。

基本上我想做的是:

  • 我想编写一个使用一个屏幕的应用
  • 在屏幕的一半我想要一个我在其中绘制 OpenGL 的 View
  • 在四分之一的时间内我想要另一个 View ,我在其中绘制不同的 OpenGL
  • 剩下的应该是一些按钮

我使用 Xcode 4.2 for iOS 5.1 for iPad

第一种方法,使用 Storyboard:

  • 我只能放置一个大型 GLKView 来绘制 OpenGL,不能放置其他独立的 GLKView
  • GLKView 中的示例 OpenGL 代码(使用 GLKViewController)工作正常。

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

  • 我可以将一个 GLKView 放入一个 Window 中,在它旁边放置一个 GLKViewController 子类并将其链接到 GtkView,但是其中没有绘制任何内容
  • 我可以在窗口中放置第二个 GLKView,旁边是一个不同的 GLKViewController 子类,但是两个 GLKView 中都没有绘制任何东西。
  • 我使用了在 StoryBoard 中运行良好的 GLKView/GLKViewController 示例。

任何方式对我来说都可以,目前没有任何效果。

感谢您的任何提示, 托尔斯滕。

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

最佳答案

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

我最终以编程方式完成了这一切,因为 Storyboard 方法似乎不够强大。

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

然后我添加子类 GLKViewControllers 及其后续 View 。

我发现的棘手部分是我需要将 ViewController 作为 subview 添加,并将它们的 View 作为 subview 添加到“主” View 。

    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;
}

希望这对您有所帮助。

关于xcode - iOS OpenGL 游戏,两个 GLKViews/GLKViewControllers,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9984389/

相关文章:

ios - Storyboard中缺少嵌入 segue 选项

ios - 将 UIView 换入或换出 ViewController 的 View

ios - 运行带有分发配置文件的 xcode 项目

ios - "Linker command failed with exit code 1 (use -v to see invocation)?"如何解决

xcode - 无法以编程方式调用委托(delegate)方法吗?

android - 寻找屏幕边缘android

iphone - 如何在 Xcode 5 中将新项目添加到源代码管理?

ios - 如何在 iOS 中使用 OpenGL 播放视频?

java - 在 Libgdx 中实现简单运动模糊的意外结果

swift - 添加新的 View Controller B 并将其更改为初始 View Controller 后出现 "View Controller A unreachable because it has no entry points"错误