2014-05-22 37 views
5

Jak wymusić orientację pionową w iOS 7, jeśli moja aplikacja jest początkowo obsługiwana dla obu orientacji?Jak wymusić orientację pionową?

+1

Nie jasne czy możesz wyjaśnić więcej. Czy potrzebujesz tylko trybu portretowego w całej aplikacji – morroko

+1

możliwy duplikat [Wymuś orientację pionową podczas przesuwania z kontrolera widoku krajobrazu] (http://stackoverflow.com/questions/14633213/force-portret-orientation-while-pushing-from-landscape -view-controller) –

Odpowiedz

2
UIViewController *c = [[UIViewController alloc]init]; 
[self presentViewController:c animated:NO completion:nil]; 
[self dismissViewControllerAnimated:NO completion:nil]; 
+0

Niech ten kod nie jest zgodny ze standardem Apple, nie jestem pewien ... Ale to dobry hack. –

+0

Kiedy używamy tego kodu, nasza aplikacja nie zostanie zatwierdzona przez Apple do produkcji. –

+1

Czy możesz wyjaśnić, dlaczego to działa, proszę? Ponadto metody te zostały wycofane w systemie iOS 6. Możliwe, że Apple zdecyduje się je usunąć w systemie iOS 8. Nie jest to pierwsza metoda, która została wycofana przez firmę Apple i usunięta wkrótce po niej. – rtiago42

0

Zastosowanie następujące podejście: w aplikacji delegata .h

@interface PlayWithWSWithLibAppDelegate : NSObject <UIApplicationDelegate, UITabBarControllerDelegate> { 

     BOOL flagOrientationAll; 
} 

@property (assign) BOOL flagOrientationAll; 

Dodaj następujący sposób w aplikacji pliku delegat .m

- (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window{ 
    //NSLog(@"PlayWithWSWithLibAppDelegate -- supportedInterfaceOrientationsForWindow"); 
    if(flagOrientationAll == YES){ 
     return UIInterfaceOrientationMaskPortrait; 
    } else { 
     return UIInterfaceOrientationMaskAll; 
    } 
} 

Wdrożenie następujący sposób w widoku, który cię chcesz obracać zarówno w orientacji pionowej, jak i poziomej zarówno dla urządzenia iPhone'a, jak i dla urządzenia iPhone'a: ​​

-(void)viewWillAppear:(BOOL)animated 
{ 
    self.tabBarController.delegate = self; 

    PlayWithWSWithLibAppDelegate *delegate = (PlayWithWSWithLibAppDelegate *) [[UIApplication sharedApplication] delegate]; 
    delegate.flagOrientationAll = YES; 
} 
} 

-(void)viewWillDisappear:(BOOL)animated 
{ 
    //NSLog(@"viewWillDisappear -- Start"); 
    PlayWithWSWithLibAppDelegate *delegate = (PlayWithWSWithLibAppDelegate *)[[UIApplication sharedApplication] delegate]; 
     delegate.flagOrientationAll = NO; 
} 

Oto mój wątek co jakiś podobny do Twojego problemu: iOS 7 Interface Orientation

5

dla całej aplikacji, otwórz plik projektu, należy przejść do zakładki Ogólne, zmień ustawienia:

enter image description here

Or bezpośrednio na plik Info.plist:

enter image description here

Jeśli chcesz tylko ją specyficzny kontroler widoku zastępują supportedInterfaceOrientations:

- (NSUInteger)supportedInterfaceOrientations 
{ 
    return UIInterfaceOrientationMaskPortrait; 
} 

Możesz przeczytać więcej o tej drugiej metody na oficjalnej UIViewController documentation. Być może znajdziesz bardziej odpowiedni sposób na swój konkretny problem.

+0

Prosto i dobrze, ale dbaj o - (BOOL) powinienAutorować metodę. Nie można go zastąpić lub zwraca wartość TAK, w przeciwnym razie nie będzie działać. – Moose

-2
#import <objc/message.h> 

objc_msgSend([UIDevice currentDevice], @selector(setOrientation:), UIInterfaceOrientationLandscapeRight);//here you may change your desired Orientation