在游戏中弹出GameCenter登陆界面

目前GameCenter的用户验证在6.0之前和之后有不同,两种方式都有弹出GameCenter的登陆验证界面,6.0以前的没什么特别的,调用GKLocalPlayer的authenticateWithCompletionHandler就会弹出对应的登陆窗口。而6.0以后的登陆是将一个块函数传给authenticateHandler,之后块函数会被自动调用,没登陆的时候块函数返回的UIViewController就对应GameCenter的登陆界面。

如何让块函数中返回的viewController在我们的游戏中显示呢?

UIWindow* window = [[UIApplication sharedApplication] keyWindow];
[window addSubview:[viewController view]];

通过以上两句简单的代码就可以显示上述的viewController,但是这边会有一个问题,通过这种方式显示出来的GameCenter登陆界面能显示,也能登陆成功,但是当登陆成功的时候登陆界面并不会自动关闭,同时左上角的取消按钮也不能点击,无法退出登陆界面,只能在登陆界面上登陆操作。

如何才能让viewController在登陆成功以后自动关闭呢?

currentGameCenterController = [[UIViewController alloc] init];
UIWindow* window = [[UIApplication sharedApplication] keyWindow];
[window addSubview:[currentGameCenterController view]];
                                   
if ([[UIDevice currentDevice].systemVersion floatValue] < 6.0) {
    [currentGameCenterController presentModalViewController:viewController animated:YES];
} else {
    [currentGameCenterController presentViewController:viewController animated: YES completion:nil];
}

其实就是在上述的viewController外再套一层UIViewController, 然后通过这个外层的UIViewController控制viewController的显示。这时候当登陆成功以后,登陆界面就会自动关闭了,同时应该还伴随这“welcome back”的提示信息。但是这变化还会有一个问题,登陆成功关闭的是viewController,我们自己创建的UIViewController还在,所以当登陆界面关闭以后虽然是回到了游戏界面,但是应该是无法操作的。

如何关闭上述我们自己创建的UIViewController呢?

GameCenter的authenticateHandler应该是状态监听,当登陆状态变化的时候传给authenticateHandler的块函数又会被调用到,而这次调用返回的是当前用户登陆成功,关闭我们自己创建的UIViewController就可以在这时候做。

if([GKLocalPlayer localPlayer].isAuthenticated)
{
    if ([[UIDevice currentDevice].systemVersion floatValue] < 6.0) {
        [currentGameCenterController dismissModalViewControllerAnimated:NO];
    } else {
        [currentGameCenterController dismissViewControllerAnimated:NO completion:nil];
    }
        
    [currentGameCenterController.view removeFromSuperview];
    [currentGameCenterController release];
    currentGameCenterController = nil;
}

说明: currentGameCenterController是类的一个成员变量。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值