在iOS6中,将ViewController推入堆栈时强制将ViewController强制为特定

我设置了以下视图控制器:


viewController1可以自由旋转到除了人像倒置之外的任何方向。


viewController2被推到viewController1的顶部,我希望它与viewController1的方向相同,并且我希望它不能旋转。


viewController3被推到viewController2的顶部。我希望viewController3处于纵向模式。


我在尝试在iOS6中完成此操作时遇到了很多问题(在iOS5中尚未尝试过)。首先,我已经创建了自己的导航控制器,并将以下内容放入其中:


- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation

{

    return [self.topViewController preferredInterfaceOrientationForPresentation];

}


- (NSUInteger)supportedInterfaceOrientations

{

    return [self.topViewController supportedInterfaceOrientations];

}


- (BOOL) shouldAutorotate

{

    return [self.topViewController shouldAutorotate];

}

我尝试了这些东西的许多不同组合,以了解是否有用。如果vc2是横向的,我主要是在强迫vc3以纵向显示。任何帮助,将不胜感激。


至尊宝的传说
浏览 599回答 3
3回答

隔江千里

- (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window{if ([self.window.rootViewController.presentedViewController isKindOfClass: [SecondViewController class]]){    SecondViewController *secondController = (SecondViewController *) self.window.rootViewController.presentedViewController;    if (secondController.isPresented)        return UIInterfaceOrientationMaskAll;    else return UIInterfaceOrientationMaskPortrait;}else return UIInterfaceOrientationMaskPortrait;}对于斯威夫特func application(application: UIApplication, supportedInterfaceOrientationsForWindow window: UIWindow) -> Int {    if self.window?.rootViewController?.presentedViewController? is SecondViewController {        let secondController = self.window!.rootViewController.presentedViewController as SecondViewController        if secondController.isPresented {            return Int(UIInterfaceOrientationMask.All.toRaw());        } else {            return Int(UIInterfaceOrientationMask.Portrait.toRaw());        }    } else {        return Int(UIInterfaceOrientationMask.Portrait.toRaw());    }}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

iOS