2016-04-12 19 views
0

ich drei View-Controller beide habe, die auf der Navigationssteuerung gedrückt werden, die ich um Rotation, nur Zweite-View-Controller zu ermöglichen subclassed habe ich es so tun,Wie Ausrichtung des View-Controller erkennen

- (BOOL)shouldAutorotate 
{  
    if ([self.topViewController isKindOfClass:[SecondViewController class]]) 
     return YES; 

    return NO; 
} 

Ich schreibe diesen Code in meinen Custom Navigation Controller. Das Problem ist, dass wenn ich meine Anwendung im Hochformat öffne und dann die Ausrichtung in Querformat ändere, mein View Controller nicht rotiert, selbst wenn mein Second View Controller es öffnet Es wird im Hochformat geöffnet, obwohl ich erwarte, dass es im Querformat geöffnet wird, da es die Drehung unterstützt.

Wie kann ich das erreichen?

+0

implementieren dreht es, wenn Sie Ihr Gerät Portrait bewegen und zurück? – Daniel

+0

Haben Sie 'func supportedInterfaceOrientations() -> UIInterfaceOrientationMask' implementiert? – Daniel

+0

Ja, es dreht sich gut, nachdem der Second View Controller geöffnet wird und ich das Gerät –

Antwort

0

Sie müssen während der Navigation attemptRotationToDeviceOrientation verwenden. Sie sollten Push/Pop-Methoden außer Kraft setzen attemptRotationToDeviceOrientation mit einer kleinen UI Verzögerung zu nennen (dispatch_async)

@implementation CustomNavigationController 

- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated 
{ 
    [super pushViewController:viewController animated:animated]; 

    [self updateOrientaion]; 
} 

- (nullable UIViewController *)popViewControllerAnimated:(BOOL)animated 
{ 
    [self updateOrientaion]; 

    return [super popViewControllerAnimated:animated]; 
} 


- (UIInterfaceOrientationMask)supportedInterfaceOrientations 
{ 
    if ([self.topViewController isKindOfClass:[SecondViewController class]]) 
     return UIInterfaceOrientationMaskAll; 

    return UIInterfaceOrientationMaskPortrait; 
} 


- (void)updateOrientaion 
{ 
    dispatch_async(dispatch_get_main_queue(), ^{ 
     [UIViewController attemptRotationToDeviceOrientation]; 
    }); 
} 

@end 

Aber wenn man zu RootViewController der UINavigationControllersupportedInterfaceOrientations Pop wird für die RootViewController genannt. Sie müssen also auch supportedInterfaceOrientations für die FirstViewController

@implementation FirstViewController 

....... 

- (UIInterfaceOrientationMask)supportedInterfaceOrientations 
{  
    return UIInterfaceOrientationMaskPortrait; 
} 

@end 
+0

Vielen Dank das hat funktioniert! Obwohl, wenn mein zweiter View-Controller lädt, gibt es eine leichte Animation, wie kann ich die Animation stoppen, weil es dem Benutzer ein Gefühl der Rotation gibt. –