Byłem w tym przez kilka weekendów, aby znaleźć odpowiednie rozwiązanie, próbowałem wielu innych rozwiązań, ale po prostu nie działało prawidłowo. Jeśli chcesz, aby tylko niektóre interfejsy były w orientacji poziomej lub pionowej, wypróbuj tę metodę poniżej. Korzystam z Xcode 7.2.1, używam Bool, aby ustawić wartość wraz z NSUSerDefaults w każdej klasie, którą chcę przestrzegać określonych UInterfaceOrientations. Poniższa metoda jest wywoływana za każdym razem, gdy pojawia się nowy interfejs użytkownika lub gdy urządzenie jest obracane, możesz to sprawdzić, umieszczając NSLog sprawdzający wartość bool w tej metodzie i przekonaj się, jak to się zmienia.
- (UIInterfaceOrientationMask)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:
W AppDelegate wykonać następujące czynności
.h @property (cesji, nonatomic) BOOL shouldRotate;
.m
- (UIInterfaceOrientationMask)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(nullable UIWindow *)window NS_AVAILABLE_IOS(6_0) __TVOS_PROHIBITED{
_shouldRotate = [[NSUserDefaults standardUserDefaults]boolForKey:@"rotateKey"];
NSLog(@"Did I get to InterfaceOrientation \n And the Bool is %d",_shouldRotate);
if (self.shouldRotate == YES)
return UIInterfaceOrientationMaskAllButUpsideDown;
else
return UIInterfaceOrientationMaskPortrait;
}
TERAZ w każdej klasie CHCESZ posiadania konkretnych UIINTERFACEORIENTATION to zrobić
-(void)viewDidAppear:(BOOL)animated{
[super viewDidAppear:YES];
// [[AppDelegate sharedAppDel]setShouldRotate:YES];
BOOL rotate = NO;
[[NSUserDefaults standardUserDefaults]setBool:rotate forKey:@"rotateKey"];
[[NSUserDefaults standardUserDefaults]synchronize];
}
-(BOOL)shouldAutorotate
{
return YES;
}
w widoki, które chcesz obrócić zmienić wartość Bool do Tak. Teraz w AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
BOOL rotate = NO;
[[NSUserDefaults standardUserDefaults]setBool:rotate forKey:@"rotateKey"];
[[NSUserDefaults standardUserDefaults]synchronize];
return YES;
}
Również w AppDelegate
- (void)applicationWillTerminate:(UIApplication *)application {
// Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
BOOL rotate = NO;
[[NSUserDefaults standardUserDefaults]setBool:rotate forKey:@"rotateKey"];
[[NSUserDefaults standardUserDefaults]synchronize];
}
Nadzieja to pomaga wielu deweloperów. Testowane i testowane wiele razy.
Pozdrowienia
JZ
NIGDY uciszyć ostrzeżenie (chyba, że jesteś ekspertem, który odpowiedział na siebie, dlaczego jest to dobry pomysł). Napraw kod. – gnasher729
@ gnasher729 OP oczywiście oznacza "quell" lub "zaspokoić" ostrzeżenie, a nie uciszyć go. –