Jak wymusić orientację pionową w iOS 7
, jeśli moja aplikacja jest początkowo obsługiwana dla obu orientacji?Jak wymusić orientację pionową?
Odpowiedz
UIViewController *c = [[UIViewController alloc]init];
[self presentViewController:c animated:NO completion:nil];
[self dismissViewControllerAnimated:NO completion:nil];
Niech ten kod nie jest zgodny ze standardem Apple, nie jestem pewien ... Ale to dobry hack. –
Kiedy używamy tego kodu, nasza aplikacja nie zostanie zatwierdzona przez Apple do produkcji. –
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
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
dla całej aplikacji, otwórz plik projektu, należy przejść do zakładki Ogólne, zmień ustawienia:
Or bezpośrednio na plik Info.plist:
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.
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
#import <objc/message.h>
objc_msgSend([UIDevice currentDevice], @selector(setOrientation:), UIInterfaceOrientationLandscapeRight);//here you may change your desired Orientation
Nie jasne czy możesz wyjaśnić więcej. Czy potrzebujesz tylko trybu portretowego w całej aplikacji – morroko
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) –