2013-06-07 4 views
3

Как говорит длинный заголовок, в последнее время я очень борется с ориентациями IOS 6. Я работаю над текущим проектом, который основан только на iPhone, почти все контроллеры view поддерживают только ориентацию на портрет (ориентация по умолчанию). У меня есть этот viewcontroller, хотя я бы хотел дать несколько ориентаций, как единственный, автономный. как мне это сделать правильно? Вот мой подход. Cheers 'IOS 6 Ориентации - только один Viewcontroller поддерживает ориентацию на пейзаж и портрет - еще ТОЛЬКО Портрет

В настройках - выбираются все ориентации, кроме портрета снизу вверх.

  • В ViewController, который я хочу дать несколько ориентации - это код встраивается

    -(NSUInteger)supportedInterfaceOrientations 
    { 
        return UIInterfaceOrientationMaskAllButUpsideDown; 
    } 
    
    - (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation 
    { 
        return UIInterfaceOrientationPortrait; 
    } 
    
    -(BOOL)shouldAutorotate 
    { 
        return YES; 
    } 
    

Для остальных viewcontollers - поддерживать одну ориентацию (ориентация по умолчанию) портрет:

-(NSUInteger)supportedInterfaceOrientations 
{ 
    return UIInterfaceOrientationPortrait; 
} 

- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation 
{ 
    return UIInterfaceOrientationPortrait; 
} 

-(BOOL)shouldAutorotate 
{ 
    return YES; 
} 

Это не работает. Кажется, что методы не называются - но проект и сборка просто привязаны к выбранным ориентациям в настройках. Почему это не работает!

Любая помощь будет глубоко оценена.

+0

[Поддержка нескольких ориентациях интерфейса] (http://developer.apple.com/library/ios/#featuredarticles/ViewControllerPGforiPhoneOS/RespondingtoDeviceOrientationChanges/ RespondingtoDeviceOrientationChanges.html) –

+0

Если вы хотите узнать, вызываются ли методы, то 'NSLog (@" anyMethodWasCalled in myViewController ")' –

+0

Не помогая никому, вы знаете, можно ли перезаписать ориентации, заданные в 'настройках' в представлении контроллер? –

ответ

2

Вы можете прочитать:

Multiple Orientations

Это то, что я делаю:

Во всех viewcontrollers:

#pragma mark Orientation handling 

    - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 
    { 
     return (interfaceOrientation == UIInterfaceOrientationPortrait || interfaceOrientation == UIInterfaceOrientationPortraitUpsideDown); 
    } 

    -(BOOL)shouldAutorotate 
    { 
     return YES; 
    } 

    -(NSUInteger)supportedInterfaceOrientations 
    { 
     return (UIInterfaceOrientationMaskPortrait | UIInterfaceOrientationMaskPortraitUpsideDown); 
    } 

Единственный ViewController:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation { 
    return YES; 
} 

Надеюсь, что это поможет.

+0

Вы сравниваете 'interfaceOrientation 'который является' UIInterfaceOrientation' с 'UIInterfaceOrientationMaskAllButUpsideDown', который является' UIInterfaceOrientationMask'. См. Проблему? – Mar0ux

+0

Спасибо за ваш ответ @lakesh оцените его, но метод shouldAutorotateToInterfaceOrientation не оценен в ios 6 и выше. Хотя я попробую код и дам вам знать, что я узнаю;) –

+0

, если вы используете для ios6 и выше, используйте preferredInterfaceOrientationForPresentation – lakesh

0

Попробуйте этот [[UIDevice currentDevice] setOrientation:UIInterfaceOrientationLandscapeRight];, для этого файла необходимо установить -fno-objc-arc.

+0

Private API, ужасная идея. –

0

-supportedInterfaceOrientations должен вернуть маску, в вашем случае:

- (NSUInteger)supportedInterfaceOrientations 
{ 
    return UIInterfaceOrientationMaskPortrait; 
} 
0

Вам нужно создать подкласс UINavigationController для представления/с, которые вы хотите показать в портрете. Из iOS 6 контроллеры представлений смотрят только на родительский или корневой контроллер для обработки вращения , а не самих контроллеров представления, которые вы делаете из своего описания.

В NavController subclass.m:

// Older versions of iOS (deprecated) if supporting iOS < 5 
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation { 
return UIInterfaceOrientationIsPortrait(toInterfaceOrientation); 
} 

// >iOS6 
- (BOOL)shouldAutorotate { 
return YES; 
} 

// >iOS6 
- (NSUInteger)supportedInterfaceOrientations { 
return UIInterfaceOrientationMaskPortrait; 
} 

Allow autorotation on just one view controller

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