强制某个页面横竖屏

IOS代码管控APP页面横竖屏切换

2014-09-09 18:33 7683人阅读 评论(1) 收藏 举报

 分类:

iOS(381) 

IOS如何使用代码管控APP页面横竖屏切换?

这个我写了个小demo,下载链接 http://code4app.com/ios/53c78e77933bf098108b4ea0

1。?首先是AppDelegate,这?里加载rootViewController?方法要变?下 :

- (BOOL)application:(UIApplication*)applicationdidFinishLaunchingWithOptions:(NSDictionary*)launchOptions

{
    self.window = [[UIWindow alloc]initWithFrame:screenBounds];
    LoadingViewController * mainViewController =[[LoadingViewController alloc] init];
    rootNavigationController * navigationController = [[rootNavigationController alloc]
					initWithRootViewController:mainViewController];
    [window setRootViewController:navigationController];
    [self.window makeKeyAndVisible];
    return YES;

}

LoadingViewController就是我的?一个?页?面,我让LoadingViewController作为我的主?页?面。

2 .但是在这之前,我不能直接将mainViewController设置为self.window.rootViewController

中间要拐?下,关键就是这个rootNavigationController *navigationController。。。。。

代码如下:rootNavigationController.h ?文件代码

#import <UIKit/UIKit.h>
@interface rootNavigationController : UINavigationController

@end

rootNavigationController.m ?文件代码

#import "rootNavigationController.h"
@interface rootNavigationController ()
@end
@implementation rootNavigationController
- (id)initWithNibName:(NSString *)nibNameOrNil
bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil
bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization

}

    return self;
}
- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the

view.

}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be

recreated.

}

/*
#pragma mark - Navigation
// In a storyboard-based application, you will often
want to do a little preparation before navigation
- (void)prepareForSegue:(UIStoryboardSegue *)segue
sender:(id)sender
{
    // Get the new view controller using [segue
destinationViewController].
    // Pass the selected object to the new view
controller.
}
*/
-(BOOL)shouldAutorotate
{

return YES;}

-(NSUInteger)supportedInterfaceOrientations
{
    return [self.viewControllers.lastObject
supportedInterfaceOrientations];
}
-
(UIInterfaceOrientation)preferredInterfaceOrientation
ForPresentation
{
    return [self.viewControllers.lastObject
preferredInterfaceOrientationForPresentation];
}

@end

rootNavigationController这个类其实平平?无奇,关键在于下?面三个?方法:

-(BOOL)shouldAutorotate
{

return YES;}

-(NSUInteger)supportedInterfaceOrientations
{
    return [self.viewControllers.lastObject
supportedInterfaceOrientations];
}
-
(UIInterfaceOrientation)preferredInterfaceOrientation
ForPresentation
{
    return [self.viewControllers.lastObject
preferredInterfaceOrientationForPresentation];
}

这三个方法就是用来控制所有的页面的横竖屏的;这三个方法是系统级的;

你不写是有另外一套规则;你写上去,自己不调用,也是会运行的.

app启动首先走 main函数,然后main函数调用AppDelegate ,AppDelegate再调用UINavigationController,UINavigationController在调才是你的界面.

UINavigationController  继承的也是UIViewController ;

但他比UIViewController更进一步.

一个app中一般来讲就一个 UINavigationController的实例在运行,所谓的UIViewController 都是在这个UINavigationController 运行的.

而且我们在做view push /pop操作的时候,其实都是在navigationController这个里面做的.

就是这个app全局的唯一实例UINavigationController

(当然,不自定义这个rootNavigationController类也是可以的嘛,初学者进公司面试的时候,面试官不是经常问这样的问题嘛,如何进行类扩展啊?各位看官自己回想一下咯,我在这里就不再赘述了)

3.当然,你要使用横竖屏幕切换,Device Orientation,上下左右四个方向就不能只勾选一个方向了,当然你要看你的项目所需要支持的方向,来判定,用哪几个点选哪几个。

然后,后面的UIViewController  都可以用代码来控制横竖屏了.

4.当然另外需要注意的是,还要在AppDelegate添加上以下方法:

- (NSUInteger)application:(UIApplication*)application supportedInterfaceOrientationsForWindow:(UIWindow*)window

{

// iPhone doesn‘t support upside down by default, while the iPad does.  Override to allow all orientations always, and let the root view controller decide what‘s allowed (the supported orientations mask gets intersected).

returnUIInterfaceOrientationMaskAll;

}

5.后面的页面控制横竖平方法:

简单来讲直接添加以下方法就好,当然,这是个强制竖屏的例子

-(NSUInteger)supportedInterfaceOrientations{

returnUIInterfaceOrientationMaskPortrait;

}

- (BOOL)shouldAutorotate

{

returnNO;

}

-(UIInterfaceOrientation)preferredInterfaceOrientationForPresentation

{

returnUIInterfaceOrientationPortrait;

}

每个方法的意思和左右我就不详细解释了,自己去查文档,话说直接直接command+左键也能够看头文件吧,里面注释的也很清楚。

这是个强制右转的例子

- (BOOL)shouldAutorotate

{

returnNO;

}

-(UIInterfaceOrientation)preferredInterfaceOrientationForPresentation

{

returnUIInterfaceOrientationLandscapeRight;

}

-(NSUInteger)supportedInterfaceOrientations

{

returnUIInterfaceOrientationMaskLandscapeRight;

}

当然,shouldAutorotate是用来控制自动旋转的,你可以设置

6.另外,重要的是,从A(竖屏)切换到B(横屏),不能用ApushViewControllerB,

必须用A presentViewController B。

[self.navigationController pushViewController:B animated:YES];(X)

[self presentViewController:B animated:YES completion:Nil];(V)

问题在哪你们自己体会吧。

示例demo,下载链接 http://code4app.com/ios/53c78e77933bf098108b4ea0

时间: 2024-12-20 08:43:29

强制某个页面横竖屏的相关文章

强制设置页面横竖屏的问题

有的时候有的需求会让页面强制的横竖屏转换,再之后的ios的版本中,- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation被官方废弃了,不能继续使用的,下面是ios6之后的强制横竖屏的方法: -(BOOL)shouldAutorotate { return YES; } -(UIInterfaceOrientationMask)supportedInterfaceOrie

WP Store APP 设置页面横竖屏的方法

在 windows phone store app 中,判断和设置页面横竖屏的方法,与 silverlight 中的 Page 类 不同,不能直接通过 Page.Orientation 进行设置.而是通过 DisplayInformation 类,方法如下: // 横屏 Windows.Graphics.Display.DisplayInformation.AutoRotationPreferences = Windows.Graphics.Display.DisplayOrientations

iOS关掉横屏后某单个页面横竖屏切换

在你想支持横竖屏的viewController里面重写两个方法: // 支持设备自动旋转 - (BOOL)shouldAutorotate {     return YES; } // 支持横竖屏显示 - (NSUInteger)supportedInterfaceOrientations {     return UIInterfaceOrientationMaskAll; } 这样在这个viewController中就可以横竖屏切换了. 但是,如果你window的rootViewContro

关于IOS屏幕旋转的几个问题1.常规设置2.个别页面强制固定横竖屏

1.常规设置屏幕旋转  (Device Orientation || info.plist-----这两个地方的设置是同步的) 1)targets->General->Deployment Info->Device Orientation  直接勾选想要的设备定位全局属性 2)Supporting Files->Info.plist->Supported interface orientations 增删属性值 2.个别页面强制横竖屏 新建一个NavigationContro

禁止横竖屏切换、强制横竖屏:

js判断屏幕横竖屏:function orient() {        //alert('gete');        if (window.orientation == 0 || window.orientation == 180) {            $("body").attr("class", "portrait");            orientation = 'portrait';            return f

iOS 实现单个页面支持横竖屏,其他页面只能竖屏

最近在自己的项目里面 有需要做一个需求 : app中某一个页面支持横竖屏, 而其他页面只能竖屏. 1 2 实现方法如下: 1 首先需要Xcode中选中支持的屏幕方向  2 Appdelegate中 .h @property (nonatomic,assign)NSInteger allowRotate; 1 .m中 //此方法会在设备横竖屏变化的时候调用 - (NSUInteger)application:(UIApplication *)application supportedInterfa

IOS强制屏幕横竖屏相互切换

最近项目要做一个html5电子协议,里面涉及到签名,竖屏签名不够,所以需要把屏幕切换到横屏,签完字后把签字内容返回到竖屏中的方框内,由于项目不上AppStore,只用企业证书打包,所以使用下面方式来实现横竖屏切换功能. bool isPortrait = true; - (IBAction)changeOri:(id)sender { if (isPortrait) { if ([[UIDevice currentDevice] respondsToSelector:@selector(setO

如何强制视频横竖屏

1.9.0以下不需要设置工程支持横竖屏,9.0以上必须要设置支持LandscapeRight 2.maintabBar 里设置 - (BOOL)shouldAutorotate { return NO; } 3.视频控制器里设置 - (BOOL)shouldAutorotate { return YES; } - (UIInterfaceOrientationMask)supportedInterfaceOrientations { return UIInterfaceOrientationMa

WebGL_0001:3D页面的重置分辨率和横竖屏事件

1,事件 重置分辩率事件 window.addEventListener("resize", a, !1) 横竖屏切换事件 window.addEventListener("orientationchange", a, !1) 最后一个参数,指定事件捕获或冒泡 原文地址:https://www.cnblogs.com/eliteboy/p/10861507.html