2013-05-21 2 views
0

глобально моя игра поддерживает две ориентации: пейзаж направо и налево пейзажDisallow ориентации в определенном CCLayer только

В одном подэкране (наследуемых CCLayer) Мне нужно, чтобы зафиксировать текущую ориентацию, так что ... текущая ориентация заблокирована ... Когда пользователь возвращается на другой экран (CCLayer), ориентация должна снова работать свободно.

ответ

1

я это так:

Edit AppDelegate.h, добавьте маску для блокировки ориентации:

@interface MyNavigationController : UINavigationController <CCDirectorDelegate> 
@property UIInterfaceOrientationMask lockedToOrientation; 
@end 

В AppDelegate.m, синтезируют маску, и заменить две функции:

@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; 
    } 
} 

Тогда, когда мне нужно заблокировать интерфейс для определенной ориентации, я получаю доступ к navController в appdelegate. Проверьте его свойство 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; 

 Смежные вопросы

  • Нет связанных вопросов^_^