我尝试建立一个基于模板“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/