全体的に、私のゲームは 2 つの向きをサポートしています: 横向き右と横向き左
1 つのサブスクリーン (CCLayer を継承) で、現在の向きをロックする必要があるため... 現在の向きがロックされています... ユーザーが別の画面 (CCLayer) に戻ると、向きは再び自由に機能するはずです。
全体的に、私のゲームは 2 つの向きをサポートしています: 横向き右と横向き左
1 つのサブスクリーン (CCLayer を継承) で、現在の向きをロックする必要があるため... 現在の向きがロックされています... ユーザーが別の画面 (CCLayer) に戻ると、向きは再び自由に機能するはずです。
私はこのようにしました:
AppDelegate.h を編集し、向きをロックするためのマスクを追加します。
@interface MyNavigationController : UINavigationController <CCDirectorDelegate>
@property UIInterfaceOrientationMask lockedToOrientation;
@end
AppDelegate.m で、マスクを合成し、2 つの関数を置き換えます。
@synthesize lockedToOrientation; // assign
-(NSUInteger)supportedInterfaceOrientations {
if (!self.lockedToOrientation) {
// iPhone only
if( [[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone )
return UIInterfaceOrientationMaskLandscape;
// iPad only
return UIInterfaceOrientationMaskLandscape;
}
else {
return self.lockedToOrientation;
}
}
// Supported orientations. Customize it for your own needs
// Only valid on iOS 4 / 5. NOT VALID for iOS 6.
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
if (!self.lockedToOrientation) {
// iPhone only
if( [[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone )
return UIInterfaceOrientationIsLandscape(interfaceOrientation);
// iPad only
// iPhone only
return UIInterfaceOrientationIsLandscape(interfaceOrientation);
}
else {
// I don't need to change this at this point
return NO;
}
}
次に、インターフェイスを特定の向きにロックする必要があるときはいつでも、appdelegate で navController にアクセスします。その interfaceOrientation プロパティを確認し、それに応じてロックされたマスクを設定します
AppController* appdelegate = (AppController*)[UIApplication sharedApplication].delegate;
const UIDeviceOrientation ORIENTATION = appdelegate.navController.interfaceOrientation;
appdelegate.navController.lockedToOrientation = ORIENTATION == UIInterfaceOrientationLandscapeLeft ? UIInterfaceOrientationMaskLandscapeLeft : UIInterfaceOrientationMaskLandscapeRight;
dealloc で、またはロックを解除したいときはいつでも、次のようにします。
AppController* appdelegate = (AppController*)[UIApplication sharedApplication].delegate;
appdelegate.navController.lockedToOrientation = 0;