0

全体的に、私のゲームは 2 つの向きをサポートしています: 横向き右と横向き左

1 つのサブスクリーン (CCLayer を継承) で、現在の向きをロックする必要があるため... 現在の向きがロックされています... ユーザーが別の画面 (CCLayer) に戻ると、向きは再び自由に機能するはずです。

4

1 に答える 1

1

私はこのようにしました:

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;
于 2013-05-21T07:53:40.137 に答える