2012-04-02 51 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