2010-07-02 3 views
1

У меня есть приложение на панели вкладок, в котором у меня есть 3 разных вида, каждый из которых имеет собственный контроллер вида.Приложение Tabbar Nav, позволяющее одному виду вращаться, а другие нет

В коде штрих-кода у меня есть это, чтобы обрабатывать вращение.

#import "RotatingTabBarController.h" 

@implementation RotatingTabBarController 

    // Override to allow orientations other than the default portrait orientation. 
    - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { 

     return [self.selectedViewController shouldAutorotateToInterfaceOrientation:interfaceOrientation]; 
} 
@end 

Затем во 2-м контроллере представления, что я хочу, чтобы повернуть в зависимости от ориентации устройства у меня есть:

// Override to allow orientations other than the default portrait orientation. 
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { 

    return YES; 
} 

А для двух других представлений, которые я не хочу, чтобы повернуть у меня есть этот метод набора ,

// Override to allow orientations other than the default portrait orientation. 
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { 
// Return YES for supported orientations 
return (interfaceOrientation == UIInterfaceOrientationPortrait); 
} 

ПРОБЛЕМА: так что это хорошо работает с учетом 1 и 3 зрения, когда и повернуть устройство они остаются в портретном режиме, который является желательным. Когда во взгляде 2 i поворачивается в альбомное, представление делает так, как ожидалось, и поворачивается в альбомное. НО, когда в режиме просмотра в режиме просмотра 1 в окне просмотра 1 или просмотра 3, просмотр 1 и 3 отображаются в альбомном режиме.

Я не могу понять, как заставить их в портрет, даже если вид 2 вращается в lanscape.

Кто-нибудь знает, как это сделать?

ответ

1

Там большая дискуссия [1] на этой уходящей с 2008 года до сих пор (смотрите на комментарии вниз несколько страниц) - суммарно похоже

application.statusBarOrientation = UIInterfaceOrientationLandscapeRight; 

или

[[UIDevice currentDevice] setOrientation:UIInterfaceOrientationLandscapeRight]; 

или

[application setStatusBarOrientation: UIInterfaceOrientationLandscapeRight animated:NO]; 

позволит вам заставить его сделать пейзаж - вы захотите сделать это, когда пользователь вернется на ваши земли capey view (s) программным способом.

[1] iPhone app in landscape mode, 2008 systems

+0

Это не должно быть действительно использован в любое время независимо от запуска приложения. Принуждение ориентации состояния в середине жизненного цикла приложения очень плохое и может иметь непреднамеренные последствия. –

+0

Любые официальные источники, говорящие об этом? Есть приложения, которые, например, «режим просмотра», который при необходимости переключает ориентацию, и множество других случаев, когда требуется изменение ориентации. – Kalle

+0

«Если ваше приложение имеет содержимое поворотного окна, вы не должны произвольно устанавливать ориентацию состояния-бара, используя этот метод» - http://developer.apple.com/library/ios/#DOCUMENTATION/UIKit/Reference/UIApplication_Class/Reference /reference.html –