我正在使用Apple's code来展示GKGameCenterViewController
:
GKGameCenterViewController *gameCenterController = [[GKGameCenterViewController alloc] init];
if (gameCenterController != nil) {
gameCenterController.gameCenterDelegate = self;
[self presentViewController:gameCenterController animated:YES completion:nil];
}
这是描述上述代码的文字:
您的视图控制器(iOS)显示游戏中心用户界面
Game Kit使用的约定是为您的一个视图控制器提供Game Kit视图控制器。您的视图控制器充当它所呈现的视图控制器的委托,以便在玩家完成查看显示的屏幕时通知它。清单2-1显示了此模式的最常见用法,即显示Game Center用户界面。游戏中心视图控制器显示许多不同的游戏中心内容,因此大多数游戏都应提供一个按钮,将玩家带到此屏幕,即使游戏还使用自定义用户界面显示游戏中心内容。
当我使用推荐的代码时,我会进入此屏幕(GameCenter Challenges),这不是我想要的:
我也试过这段代码:
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"gamecenter:"]];
通过使用该代码,我进入了我希望显示的屏幕:
我是否误解了某些事情或者我做错了什么?第一段代码不应该把我带到主菜单吗?为什么不显示排行榜?
更新
我按照phix23的建议实施了viewState
:
GKGameCenterViewController *gameCenterController = [[GKGameCenterViewController alloc] init];
if (gameCenterController != nil) {
gameCenterController.gameCenterDelegate = self;
gameCenterController.viewState = GKGameCenterViewControllerStateLeaderboards;
[self presentViewController:gameCenterController animated:YES completion:nil];
}
但是,尽管我想/尝试显示排行榜屏幕,它仍会显示相同的挑战屏幕。
答案 0 :(得分:1)
自iOS 6开始提供的GKGameCenterViewController
可以显示启用游戏中心的应用程序的排行榜,成就和挑战。
您可以通过设置viewState
的{{1}}来更改初始视图。如果您未设置此属性,它将显示默认视图,这是您的案例中的质询视图。我猜你没有设置任何排行榜或成就,所以没有任何东西可以显示。
答案 1 :(得分:0)
尝试使用此代码:
-(void)showGameCentersDefaultPage {
GKGameCenterViewController *gameCenterController = [[GKGameCenterViewController alloc] init];
if (gameCenterController != nil) {
gameCenterController.gameCenterDelegate = self;
gameCenterController.viewState = GKGameCenterViewControllerStateDefault;
[self presentViewController:gameCenterController animated:YES completion:nil];
}
}
如果您想从特定类型的GameCenter排行榜开始,可以使用 leaderboardID
调用以下方法- (void)showLeaderboard:(NSString*)leaderboardID {
GKGameCenterViewController *gameCenterController = [[GKGameCenterViewController alloc] init];
if (gameCenterController != nil) {
gameCenterController.gameCenterDelegate = self;
//The next three lines are the lines of interest...
gameCenterController.viewState = GKGameCenterViewControllerStateDefault;
gameCenterController.leaderboardTimeScope = GKLeaderboardTimeScopeToday;
gameCenterController.leaderboardCategory = leaderboardID;
[self presentViewController:gameCenterController animated:YES completion:nil];
}
}
答案 2 :(得分:0)
使用GKGameCenterViewController
并设置视图状态:
//Create a leaderboard view controller
GKGameCenterViewController *leaderboardViewController = [[GKLeaderboardViewController alloc] init];
leaderboardViewController.viewState = GKGameCenterViewControllerStateLeaderboards;
//Set the time scope (ex. All Time, This Week, Today) and the leaderboard ID
leaderboardViewController.timeScope = GKLeaderboardTimeScopeAllTime;
leaderboardViewController.leaderboardCategory = leaderboardID;
//Set the delegate so we can handle various actions including dismissal
leaderboardViewController.leaderboardDelegate = self;
//Present the view controller
[self presentViewController:leaderboardViewController animated:YES completion:nil];
此代码将显示一个视图控制器,显示所有游戏排行榜(如果只有一个,则排名)。您还可以设置属性,例如要显示的排行榜,时间范围,委托等。另请注意,您可以使用GKAchievementViewController
对成就执行类似的操作。
您在问题中提供的代码,
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"gamecenter:"]];
启动GameCenter应用程序。这意味着iOS将退出您的应用并切换到GameCenter。这可能会让用户感到困惑。您还应该避免让用户离开您的应用。相反,请使用在您的应用内部以模态方式显示的GKViewControllers
。
答案 3 :(得分:0)
对于iOS 7.0,我使用以下内容:
显示排行榜:
- (void)displayLeaderboard:(UIViewController *)viewController
{
GKGameCenterViewController *gameCenterController = [[GKGameCenterViewController alloc] init];
if (gameCenterController != nil) {
gameCenterController.gameCenterDelegate = self;
gameCenterController.viewState = GKGameCenterViewControllerStateLeaderboards;
[viewController presentViewController:gameCenterController animated:YES completion:nil];
}
}
展示成就:
- (void)displayAchievements:(UIViewController *)viewController
{
GKGameCenterViewController *gameCenterController = [[GKGameCenterViewController alloc] init];
if (gameCenterController != nil) {
gameCenterController.gameCenterDelegate = self;
gameCenterController.viewState = GKGameCenterViewControllerStateAchievements;
[viewController presentViewController:gameCenterController animated:YES completion:nil];
}
}
请注意,尝试使用这些函数的视图控制器需要自行传递(即 viewController 参数必须设置为某个活动视图控制器)。
希望这有帮助。