`
dadi520
  • 浏览: 145858 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类
最新评论

ios UINavigationController中强制只有一个viewcontroller 为 landscape 模式

 
阅读更多

 

竖屏模式代码

 

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation{
    return (toInterfaceOrientation == UIInterfaceOrientationPortrait);
}
-(BOOL)shouldAutorotate {
    return YES;
}
- (NSUInteger)supportedInterfaceOrientations {
    return UIInterfaceOrientationMaskPortrait;
}

 

 

同样的,横屏模式一样的代码

 

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation{
    return (toInterfaceOrientation == UIInterfaceOrientationLandscapeLeft);
}
-(BOOL)shouldAutorotate {
    return YES;
}
- (NSUInteger)supportedInterfaceOrientations {
    return UIInterfaceOrientationMaskLandscapeLeft;
}

 

Every view controller pushed onto the navigation controllers stack have to support the same orientations. This means that it is not possible to have some view controllers only supporting portrait and others only supporting landscape. In other words all view controllers on the same navigation controller stack should return the same in the delegate:

 

(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation

 

 

But there is a simple solution to this! Here is an example for going from portrait to landscape. Here is the steps to do it and below is code to support it.

 

1. Create a ‘fake’ view controller that will be root in a sub navigation controller. 

    This view controller should support landscape.

2. Create a new instance of a UINavigationController, add an instance of the ‘fake’ view      controller as root and an instance of your landscape view controller as second view controller

3. Present the UINavigationController instance as modal from the parent view controller

 

First, create a new view controller (FakeRootViewController) with this code:

 

interface FakeRootViewController : UIViewController
@property (strong, nonatomic) UINavigationController* parentNavigationController;
@end

@implementation FaceRootViewController
@synthesize parentNavigationController;
// viewWillAppear is called when we touch the back button on the navigation bar
(void)viewWillAppear:(BOOL)animated {
  // Remove our self from modal view though the parent view controller
  [parentNavigationController dismissModalViewControllerAnimated:YES];
}
(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
   return (interfaceOrientation == UIInterfaceOrientationIsLandscape(interfaceOrientation));
} 

 

Here is the code to present the view controller that you wish to show in landscape mode:

 

FakeRootViewController* fakeRootViewController = [[FakeRootViewController alloc] init];[fakeRootViewController.navigationItem setBackBarButtonItem:backButton]; // Set back button
// The parent navigation controller is the one containing the view controllers in portrait mode.
fakeRootViewController.parentNavigationController = parentNavigationController;

UINavigationController* subNavigationController = // Initialize this the same way you have initialized your parent navigation controller.

UIViewController* landscapeViewController = // Initialize the landscape view controller

[subNavigationController setViewControllers:
   [NSArray arrayWithObjects:fakeRootViewController, 
                                               landscapeViewController, nil] animated:NO];

[_navigationController presentModalViewController:subNavigationController animated:YES];

 

Remember that the landscapeViewController should also have this implementation:

(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
   return (interfaceOrientation == UIInterfaceOrientationIsLandscape(interfaceOrientation));
} 

 

 

 

 

分享到:
评论

相关推荐

    IOS7 UINavigationController滑动Demo

    在iOS开发中,UINavigationController是苹果提供的一种容器类视图控制器,它负责管理一个堆栈式的视图控制器序列。在iOS 7之前,用户通常通过导航栏上的返回按钮或者手势来实现页面间的切换。然而,随着iOS 7的发布...

    iOS 使用UINavigationController进行页面间跳转

    在iOS应用开发中,页面间的跳转是用户体验的重要组成部分,而`UINavigationController`是苹果提供的一个强大工具,用于管理屏幕间的导航。这个类提供了一种优雅的方式来组织和控制多个`UIViewController`实例,允许...

    UINavigationController Demo代码

    在iOS应用开发中,`UINavigationController`是苹果提供的一个核心组件,主要用于管理多个视图控制器的堆栈,实现页面间的导航。本示例代码“UINavigationController Demo”将深入讲解如何在iOS应用中有效地使用`...

    iOS 5 编程源码-UINavigationController

    导航控制器(UINavigationController)用来管理一系列显示层次型信息的场景。一般而言,逐步显示更详细的信息。 导航控制器 -- 用户在场景之间切换时,导航控制器依次将视图控制器压入(push)堆栈中,且当前场景的...

    两个viewcontroller的界面切换

    "两个viewcontroller的界面切换"这一主题涉及到如何在iPhone应用程序中平滑地从一个ViewController过渡到另一个,同时实现动画效果,以提供良好的用户体验。在这个过程中,我们可以使用多种方法来实现这种切换,包括...

    RTRootNavigationController:让每一个 ViewController 都有自己独立的 NavigationBar.zip

    在iOS开发中,导航控制器(UINavigationController)是一个非常重要的组件,它用于管理一系列视图控制器,并提供一个统一的导航界面,通常包括一个顶部的导航栏(NavigationBar)。然而,标准的...

    iOS 自定义UINavigationController和UITabBarController

    `UINavigationController`负责管理一个堆栈式的视图控制器序列,用户可以使用“返回”按钮来前进或后退。自定义`UINavigationController`通常涉及以下几个方面: 1. **自定义导航栏(NavigationBar)**:可以通过...

    iOS如何present出一个透明导航控制器NavigationController

    在iOS开发中,有时我们希望实现一种特殊的效果,比如在presenting一个新的视图控制器时,不仅保持原有的背景可见,还能给用户带来半透明或者毛玻璃(Blur Effect)的视觉体验。在这种情况下,我们需要创建一个透明的...

    iOS 7UINavigationController

    首先,UINavigationController在iOS 7中引入了一个显著的变化,即默认的透明背景效果。在之前的版本中,navBar通常是不透明的,但在iOS 7中,navBar的背景变为完全透明,这样可以让内容视图无缝地延伸到导航栏之下,...

    iOS7 ViewController转场

    iOS系统提供了默认的转场动画,如UINavigationController的pushViewController:animated:方法会执行一个从右向左滑动的push动画,而popViewControllerAnimated:则反之,从左向右滑出。对于模态呈现(present)和...

    IOS强制横竖屏代码

    例如,如果一个应用只想在横屏模式下运行,可以在`UIViewController`的子类中这样实现: ```swift override var shouldAutorotate: Bool { return true // 允许自动旋转 } override var ...

    UINavigationController自定义

    总之,自定义`UINavigationController`的push动画是iOS开发中的一个高级技巧,它能帮助开发者为应用增添独特的视觉效果和交互体验。通过理解并实践上述步骤,开发者可以自由地塑造导航控制器的行为,从而提升应用的...

    ios-手势借助导航栏可以切换viewController.zip

    "ios-手势借助导航栏可以切换viewController.zip"这个压缩包文件,显然包含了一个实现通过手势在导航栏侧滑来切换ViewController的解决方案。这种功能常见于许多应用,让用户能够方便地浏览多个视图或内容板块,而...

    IOS应用源码——发布一个问题 就提供一个新demo,页面导航跳转的简单demotest.zip

    在这个"test"项目中,我们可能看到一个包含UINavigationController的Storyboard文件,用于管理多个ViewController的层级关系。在Storyboard中,开发者可以通过设置 segue(连接)来定义视图间的跳转逻辑。segue有两...

    IOS 导航 UINavigationController

    IOS 导航 UINavigationController,说明了setBackBarButtonItem,setRightBarButtonItem,setLeftBarButtonItem,setTitleView

    ios 页面跳转及屏幕旋转demo(无xib)

    在这个"ios 页面跳转及屏幕旋转demo(无xib)"中,开发者提供了一个没有使用XIB(Interface Builder)文件的示例,完全依赖代码来实现界面布局和交互。让我们详细探讨这两个关键知识点。 **页面跳转** 在iOS中,页面...

    iOS开发例程 -- UINavigationController和UITabBarController合用

    很多时候我们创建一个基于UITabBarController的application以后还希望能够在每个tab view都可以实现导航控制,即添加一个UINavigationController来实现tabview内部的view之间的切换,这即是本文所要介绍的。

    UITabBarController和UINavigationController混用

    在这个名为 "TabBarAndNavigation" 的示例项目中,开发者可能已经创建了一个实际运行的 Demo,展示了如何在 `UITabBarController` 和 `UINavigationController` 结合使用的场景下,根据需求动态隐藏和显示 `tabBar`...

    uinavigationcontroller用法.rar

    uinavigationcontroller是iOS开发中的一个核心组件,它用于管理一系列UIViewController的堆栈,提供导航界面。这个"uinavigationcontroller用法.rar"文件很显然是为了详细解释如何在Objective-C的环境中利用...

    UINavigationController详解与使用(二)页面切换和segmentedController

    在iOS开发中,`UINavigationController`是苹果提供的一种强大的视图控制器容器,它负责管理一个堆栈式的视图控制器序列,通常用于实现页面间的导航。本篇将深入讲解`UINavigationController`的页面切换机制以及如何...

Global site tag (gtag.js) - Google Analytics