基于导航的应用程序:只有一个风景UIVIewController

时间:2013-05-01 13:12:18

标签: iphone ios objective-c uiviewcontroller orientation

对于目标C和iOS仍然是新手我面临一个新问题。

这很简单,我在我的应用程序中只需要一个UIViewController处于横向模式,所以我用这种方式构建我的应用程序:

一个自定义UINAvigationController:MyNavController在我的MainStoryBoard.storyboard中设置为“是初始视图控制器”。然后我添加了这个navController ...:

- (NSUInteger)supportedInterfaceOrientations
{

    return [[self topViewController] supportedInterfaceOrientations];
}

...能够控制自定义导航控制器的哪些UIVIewController子项可以横向显示。

在我设置的风景UIVIewController中:

- (NSUInteger)supportedInterfaceOrientations
{
        return UIInterfaceOrientationMaskLandscapeLeft ;
        return UIInterfaceOrientationMaskPortrait; 
}

所以我可以得到这个控制器的风景。 在我的笔尖(landscape.xib)中的这个横向控制器中,我在UIPortrait模式下设置了一个欢迎视图,在这个视图后面我有了我的横向视图。因此,当用户按下控制器时,他发现他必须转动他的iPhone屏幕。我使用以下方式听取方向改变:

[[NSNotificationCenter defaultCenter] addObserver:self  selector:@selector(orientationChanged)  name:UIDeviceOrientationDidChangeNotification  object:nil];

在orientationChanged中,我隐藏了纵向视图,然后我们可以看到横向视图。

它可以工作,但是当你快速旋转时它会非常糟糕,有时隐藏视图有时候不会。所以有我的问题:

  • 在基于导航的应用上,只有一个控制器格局能够实现的最佳方法是什么?
  • 我用:

    [self.navigationController pushNavigationController:landscapeController];

还有另一种不推送ladnscapeController的方式,以便它不再依赖于navController吗?

感谢所有人,欢迎任何帮助。

1 个答案:

答案 0 :(得分:0)

在推送下一个控制器之前使用此代码

[UIApplication sharedApplication].statusBarOrientation = UIInterfaceOrientationLandscapeRight;

弹出后退控制器时使用此代码

 [UIApplication sharedApplication].statusBarOrientation = UIInterfaceOrientationIsPortrait(UIInterfaceOrientationMaskPortrait);