GKTurnBasedMatchmakerViewController适用于iPad但不适用于iPhone

时间:2012-08-21 03:14:00

标签: objective-c ios uikit gamekit

我们一直遇到这个问题,但在文档或在线搜索中找不到答案..

我们的iOS游戏基于OpenGL ES,我们正在实施GameCenter回合制游戏。以下代码显示了用于创建基于回合的匹配的匹配UI。此代码在我的iPad 1和iPad 3上运行良好。但是,它在我的iPhone 4S上无效!

[更新:]我们在View层次结构的顶部使用UIWindow,GL视图/图层作为子视图。这在呈现时掩盖了新观点。我现在可以通过在主窗口中添加UIView以及将GL视图作为其子视图来查看此窗口。但是,我仍然无法与这种观点互动..

此代码来自.mm文件,我们将C ++和Objective-C代码混合在一起。

// Configure the match making view, with our own delegate
GKTurnBasedMatchmakerViewController *mmvc = 
[[GKTurnBasedMatchmakerViewController alloc] 
 initWithMatchRequest:request];    
mmvc.showExistingMatches = YES;


// Uses our own delegate.
if(!g_pTurnBasedDelegate)
{
    g_pTurnBasedDelegate = [[TurnBasedDelegate alloc] init];
}

mmvc.turnBasedMatchmakerDelegate = g_pTurnBasedDelegate;

// Get the main window's root controller and instruct it to show the match making delegate.
if(g_Env && g_Env->m_pWindow)
{
    RefPtr<WindowIOS> pIOSWin = ref_static_cast<WindowIOS>(g_Env->m_pWindow);

    UIWindow * pUIWin = (UIWindow *)pIOSWin->GetHandle();
    UIViewController * pController = [pUIWin rootViewController];


    if(pController)
    {
        g_pRootViewController = pController;
    }

}

if(g_pRootViewController)
{
    [g_pRootViewController presentViewController:mmvc animated:YES completion:nil];
}

1 个答案:

答案 0 :(得分:2)

过了一会儿回到这个问题。问题不在于Game Center控制器,而在于我们如何设置主应用程序视图。这恰好适用于iPad,但不适用于iPhone。

对于我们的应用程序,我们需要在代码中初始化整个视图层次结构,而不是使用NIB / Storyboard。

我们旧的初始化步骤是:

  
      
  1. UIWindow init和make key。
  2.   
  3. UIWindow addView(我们的OpenGL窗口)。
  4.   
  5. UIWindow addView(触摸响应者UIView)。
  6.   
  7. UIWindow rootViewController = [[ViewController alloc] init];
  8.   

将我们的视图直接添加到UIWindow会妨碍View Controllers的功能,并导致iPhone与iPad之间的未定义行为。

我们的新初始化步骤(如果有人有这些问题,请解决这些问题):

  
      
  1. UIWindow init和make key。
  2.   
  3. UIWindow rootViewController = [[ViewController alloc] init];
  4.   
  5. rootViewController.view = [[GLAndTouchView alloc] init];
  6.   

希望任何遇到同样问题的人都会觉得这很有用。