我们一直遇到这个问题,但在文档或在线搜索中找不到答案..
我们的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];
}
答案 0 :(得分:2)
过了一会儿回到这个问题。问题不在于Game Center控制器,而在于我们如何设置主应用程序视图。这恰好适用于iPad,但不适用于iPhone。
对于我们的应用程序,我们需要在代码中初始化整个视图层次结构,而不是使用NIB / Storyboard。
我们旧的初始化步骤是:
- UIWindow init和make key。
- UIWindow addView(我们的OpenGL窗口)。
- UIWindow addView(触摸响应者UIView)。
- UIWindow rootViewController = [[ViewController alloc] init];
醇>
将我们的视图直接添加到UIWindow会妨碍View Controllers的功能,并导致iPhone与iPad之间的未定义行为。
我们的新初始化步骤(如果有人有这些问题,请解决这些问题):
- UIWindow init和make key。
- UIWindow rootViewController = [[ViewController alloc] init];
- rootViewController.view = [[GLAndTouchView alloc] init];
醇>
希望任何遇到同样问题的人都会觉得这很有用。