iOS控制屏幕旋转方向

如何控制的应用屏幕旋转情况,有以下三种方式

一、非代码方式(不灵活控制横竖屏适配)

如果你的程序不需要适配旋转情况或者完全不考虑横屏情况

那这不失为一种最简单有效的方法,但也很粗暴

步骤:TARGETS-->工程-->Development Info--> 如果只勾选Portrait 方向(竖屏向上模式),程序就支持这一个方向,开发者可根据需求慎重选择




二、代码方式(不灵活控制横竖屏适配)

直接在AppDelegate中添加如下函数,返回应用程序所支持的方向

- (UIInterfaceOrientationMask)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window {
    return UIInterfaceOrientationMaskPortrait;
}


三、代码方式(灵活控制横竖屏适配)

在大型项目的开发中,需要考虑可能出现的情况,为了以后扩展性而言,建议使用这种方式

这要分几种情况:

思路:iOS中控制屏幕方向的最终权限将会回归到“视图容器”的最外层(可以理解为父视图控制器),但一般情况我们需要将控制权限下放到具体的控制器页面,分为如下几种情况


1.   UIWindow的rooViewController  为   UIViewController 时,直接在UIViewController中做如下实现

(此时直接由ViewController控制屏幕方向)

#pragma mark - Orientation
- (UIInterfaceOrientationMask)supportedInterfaceOrientations {
    return UIInterfaceOrientationMaskPortrait;
}
- (BOOL)shouldAutorotate {
    return YES;
}
- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation {
    return UIInterfaceOrientationPortrait;
}
第一个函数为所能支持旋转的方向

第二个函数为在第一个函数所允许的方向之内是否允许屏幕旋转

第三个为该视图控制器进入时以什么方向呈现


2.   UIWindow的rootViewController 为 UINavigationController,此时在实现1的情况下,在UINavigationController中

(此时由ViewController将支持的方向传递给UINavigationController,再由UINavigationController控制屏幕方向)

#pragma mark - Orientation
- (UIInterfaceOrientationMask)supportedInterfaceOrientations {
    return self.topViewController.supportedInterfaceOrientations;
}

- (BOOL)shouldAutorotate {
    if (self.presentedViewController) {
        return self.presentedViewController.shouldAutorotate;
    }
    if (self.topViewController.presentedViewController) {
        return self.topViewController.presentedViewController.shouldAutorotate;
    }
    return self.topViewController.shouldAutorotate;
}

- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation {
    return self.topViewController.preferredInterfaceOrientationForPresentation;
}

3.   UIWindow的rootViewController 为 UITabBarController,UITabBarController 的子视图控制器为UINavigationController,UINavigationController 的子视图控制器为 UIViewController, 此时在实现1和2 的情况下,在UITabBarController中

(此时由ViewController将支持的方向传递给UINavigationController,再由UINavigationController将支持的方向传递给UITabBarController, 再由UITabBarController控制屏幕方向)

#pragma mark - Orientation
- (UIInterfaceOrientationMask)supportedInterfaceOrientations {
    return self.selectedViewController.supportedInterfaceOrientations;
}

- (BOOL)shouldAutorotate {
    return self.selectedViewController.shouldAutorotate;
}

- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation {
    return self.selectedViewController.preferredInterfaceOrientationForPresentation;
}




你可能感兴趣的:(iOS,iOS,随记)