かなり一般的な問題のようですが、ソリューションの検索と実装がうまくいきませんでした。
横向きのみを目的としたCocos2dゲームを作成しましたが、Gamecenterにアクセスする必要があります。Gamecenterはポートレートモードを有効にして動作していますが、ゲームをポートレートモードに切り替えることもできます。
私は次の修正を試みました:
ランドスケープのみのアプリでのGameCenter認証はUIApplicationInvalidInterfaceOrientationをスローします
横向きのみのcocos2dアプリにGameCenterを追加した後のiOS6でのエラー
問題は、UIViewControllersの代わりにCCLayersを使用してゲームを構築したことだと思います
例:MenuLayer.h
@interface MenuLayer : CCLayer <GKAchievementViewControllerDelegate, GKLeaderboardViewControllerDelegate, UINavigationControllerDelegate>{
..my header info..
}
MenuLayer.m
...
-(NSUInteger)supportedInterfaceOrientations {
return UIInterfaceOrientationMaskLandscape;
}
-(BOOL)shouldAutorotate {
return [[UIDevice currentDevice] orientation] != UIInterfaceOrientationPortrait;
}
-(void)authenticateLocalPlayer
{
GKLocalPlayer * localPlayer= [GKLocalPlayer localPlayer];
if(localPlayer.authenticated == NO)
{
NSString *reqSysVer = @"6.0";
NSString *currSysVer = [[UIDevice currentDevice] systemVersion];
if ([currSysVer compare:reqSysVer options:NSNumericSearch] != NSOrderedAscending)
{
[[GKLocalPlayer localPlayer] setAuthenticateHandler:(^(UIViewController* viewcontroller, NSError *error) {
if (viewcontroller != nil) {
AppController *app = (AppController*) [[UIApplication sharedApplication] delegate];
[[app navController] presentModalViewController:viewcontroller animated:YES];
}else if ([GKLocalPlayer localPlayer].authenticated)
{
//do some stuff
}
})];
}
else
{
[localPlayer authenticateWithCompletionHandler:^(NSError *error){
if(localPlayer.isAuthenticated)
{
//Peform Additionl Tasks for the authenticated player.
}
}];
}
}
}
...
UIViewControllersの代わりにCCLayersを使用してゲームを構築したので、どのような選択肢がありますか?CCLayersがusesupportedInterfaceOrientationsまたはshouldAutorotateを呼び出さないと仮定して正しいですか?
または、問題を修正するためにこのコードを何らかの方法で変更することになっていますか?
// Create a Navigation Controller with the Director
navController_ = [[UINavigationController alloc] initWithRootViewController:director_];
navController_.navigationBarHidden = YES;