目前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是类的一个成员变量。

在游戏中弹出GameCenter登陆界面相关推荐

  1. DirectX全屏游戏中弹出窗口(转)

    一直有人问如何在DirectX全屏游戏中弹出窗口就象金山游侠一样.我答应过要给出原码,只是一直没有时间整理,不过现在总算是弄玩了.代码不长,大致作了些注释,但愿你能看懂:) 按照我的说明一步步作应该就 ...

  2. android切换账号登录界面,华为游戏切换安卓账号登陆界面

    华为手机如何切换游戏账号? 换华为手机账号的方法是点击设置中的华为账号,退出当前账号后再输入新的账号即可,具体操作步骤如下: 1.点击主菜单页面的"设置" 2.点击列表中的&quo ...

  3. java山寨qq_java图形界面之 山寨QQ登陆界面

    要山寨出QQ登陆界面,首先要对java的图形界面有一定的了解.在jdk1.4之前,图形界面所用到的所有类和接口都在javax.awt之下,在其之后就都在javax.swing里了. 关于图形界面的开发 ...

  4. 解决登陆界面软键盘弹出遮住登陆按钮

    android:windowSoftInputMode属性一共同拥有9个取值.各自是: stateUnspecified: 当设置属性为stateUnspecified的时候,系统是默认不弹出软键盘的 ...

  5. 微信授权登陆界面无法再次弹出,无法用户切换

    微信授权登陆界面无法再次弹出,无法用户切换 一开始在项目中总是发现微信登录只在第一次给用户授权,后面微信登录后就不显示授权登录的界面.这样就导致微信用户无法切换,无法进行新用户的授权.查了很久才找到解 ...

  6. Android实现游戏登陆界面(自动跳转)

    0x00:前言 本篇主要介绍用Android Studio实现游戏登陆界面,自动跳转,代码和资源文件我会上传到GitHub上,需要的可以自行下载.登陆界面功能包括记住密码,注册等. 下载链接: htt ...

  7. 如何实现从登陆界面跳转到游戏大厅界面

    登陆界面 using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngin ...

  8. 机房收费系统问题集(2)——移动登陆界面+show出子窗体

       安装上机房收费系统样本,连接上数据库,在运行的时候,我很是佩服机房收费系统的高大上    在我亲自敲的时候遇到了下面的问题: (1)登陆界面不能用鼠标移动    在机房收费系统的样本中,登陆界面 ...

  9. Unity之UI和登陆界面与暂停界面

    Unity----UI和登陆界面与暂停界面 接触了Unity制作不管是程序还是游戏都避免不了UI的制作,但是在网上搜的UI制作的学习过程,额-一言难尽,就像是拼图一样在那一块块搜索然后再将它拼装起来, ...

最新文章

  1. springboot1——第一个springboot程序
  2. hammer用法 jquery.hammer.js
  3. 没有回家的等于没过年
  4. android分辨率px跟dp,Android屏幕适配 px,dp,dpi及density的关系与深入理解
  5. 基于JAVA+SpringMVC+Mybatis+MYSQL的健身房管理系统
  6. arch_version(12) of input model should be 11!
  7. 车载语音识别问题多 车主都说不靠谱
  8. linux 7启动xserver,linux7.x下配置nginx开机自启动
  9. hscan扫描mysql代码_HScan 扫描器
  10. 深度学习 机器学习 数据集资源汇总
  11. linux命令 dstat,dstat命令
  12. Python图像处理丨基于OpenCV和像素处理的图像灰度化处理
  13. React-Router 刷新后报错 or Cannot GET /detail
  14. 龙芯cpu linux恢复密码,中标麒麟(龙芯CPU)--忘记root密码怎么修改?
  15. 产品经理小技术:图片素材随手找,原型设计快又好
  16. 基于ug的框架断路器抽屉座运动仿真
  17. 用 FC FOR nexenta 山寨SAN存储
  18. 陈天桥向私服取经 盛大免费放手一搏
  19. 关于内网穿透的几种方法
  20. 计算机中的位运算—正数,负数,原码,反码,补码

热门文章

  1. 11. Why Deep
  2. zznuoj 1047 对数表
  3. 【Fuzzy】模糊专家系统(3)
  4. 从ChatGPT到AGI还有多远?
  5. 【Zabbix】SNMPtrap-实现主动监控的原理与安装配置
  6. python 实现HMM
  7. 什么是缓冲区溢出?有说明危害?
  8. 拉易网做HTML邮件格式年会邀请函,又快又好看,赶紧来围观吧!
  9. table 表格中 colgroup 和 col 标签
  10. 支付宝APP支付回调问题