iOS9横竖屏设置的处理方法

在一般的视频类APP播放的时候都会支持横屏,这样做的好处就是便于观看。你的项目中支持横屏吗?我们一起了解一下,在iOS9中横竖屏设置的处理方法吧!

支持横竖屏配置

在iOS6以后,如果APP需要支持横屏,需要在xcode设置中General里面进行勾选配置:

配置完成之后,我们可以看一下Info.plist里面的Supported interface orientations选项也相应的改变了。如下图:

当然,我们也可以直接在Info.plist进行配置。

支持横竖屏方法

在iOS6之前我们可以直接用这个方法进行配置:

 - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation NS_DEPRECATED_IOS(2_0, 6_0) __TVOS_PROHIBITED; 

在iOS6之后,这个方法被NS_DEPRECATED_IOS,也就是废弃掉了。废弃了这个方法,苹果相应的也给出了新的方法来代替:

// New Autorotation support.
- (BOOL)shouldAutorotate NS_AVAILABLE_IOS(6_0) __TVOS_PROHIBITED;
- (UIInterfaceOrientationMask)supportedInterfaceOrientations NS_AVAILABLE_IOS(6_0) __TVOS_PROHIBITED;

我们可以看到iOS6之前是一个方法,在iOS6之后变成两个方法了,一个是是否旋转的方法,一个是支持的方向的方法。

实例一:

假设:我们ViewController是直接加载window的self.window.rootViewController上面的。代码如下:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // Override point for customization after application launch.
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    ViewController *vc = [[ViewController alloc] init];
    self.window.rootViewController = vc;
    [self.window makeKeyAndVisible];
    return YES;
}

如果我们要是想支持上面General里勾选的方向(竖屏、横屏向左已经横屏向右)该如何实现呢?首先,我们应该设置让他支持旋转,然后在设置支持的方向。代码如下:

 1 //支持旋转
 2 -(BOOL)shouldAutorotate{
 3    return YES;
 4 }
 5 //支持的方向
 6 - (UIInterfaceOrientationMask)supportedInterfaceOrientations {
 7     return UIInterfaceOrientationMaskAllButUpsideDown;
 8 }
 9 其中UIInterfaceOrientationMask是一个枚举:
10
11 typedef NS_OPTIONS(NSUInteger, UIInterfaceOrientationMask) {
12     UIInterfaceOrientationMaskPortrait = (1 << UIInterfaceOrientationPortrait),
13     UIInterfaceOrientationMaskLandscapeLeft = (1 << UIInterfaceOrientationLandscapeLeft),
14     UIInterfaceOrientationMaskLandscapeRight = (1 << UIInterfaceOrientationLandscapeRight),
15     UIInterfaceOrientationMaskPortraitUpsideDown = (1 << UIInterfaceOrientationPortraitUpsideDown),
16     UIInterfaceOrientationMaskLandscape = (UIInterfaceOrientationMaskLandscapeLeft | UIInterfaceOrientationMaskLandscapeRight),
17     UIInterfaceOrientationMaskAll = (UIInterfaceOrientationMaskPortrait | UIInterfaceOrientationMaskLandscapeLeft | UIInterfaceOrientationMaskLandscapeRight | UIInterfaceOrientationMaskPortraitUpsideDown),
18     UIInterfaceOrientationMaskAllButUpsideDown = (UIInterfaceOrientationMaskPortrait | UIInterfaceOrientationMaskLandscapeLeft | UIInterfaceOrientationMaskLandscapeRight),
19 } __TVOS_PROHIBITED;

可以根据自己的需求来选择。上面我们说了假设这个条件,如果rootViewController上导航,我们直接在ViewController里面设置,这个方法就不灵了。(大家可以自己测试一下)

实例二:

为什么是导航上面的方法就不灵了呢?原因很简单,我们没有设置导航支持的方向。别忘了UINavigationController也是UIViewController的子类。需要受到同样的待遇的。

如何设置呢?我们可以创建一个UINavigationController的子类,假设叫GGPublicNavigationViewController。然后,我们在GGPublicNavigationViewController.m文件里面也实现着两个方法:

1 //支持旋转
2 -(BOOL)shouldAutorotate{
3    return YES;
4 }
5 //支持的方向
6 - (UIInterfaceOrientationMask)supportedInterfaceOrientations {
7     return UIInterfaceOrientationMaskAllButUpsideDown;
8 }

这样设置之后,即使我们push进去的UIViewController没有实现上面的连个方法,也是可以支持横屏的。也就是说,我们push的所有都支持横屏。这个做法是不是很暴力!

实例三:

有些童鞋会问了,如何控制每个界面支持的方向呢?这也是可以办到的,在GGPublicNavigationViewController不能写死支持哪个。我们可以这么写:

1 -(BOOL)shouldAutorotate{
2     return [self.topViewController shouldAutorotate];
3 }
4 //支持的方向
5 - (UIInterfaceOrientationMask)supportedInterfaceOrientations {
6     return [self.topViewController supportedInterfaceOrientations];;
7 }

self.topViewController是当前导航显示的UIViewController,这样就可以控制每个UIViewController所支持的方向啦!

时间: 2024-10-08 07:11:17

iOS9横竖屏设置的处理方法的相关文章

xcode5下cocos2dx横竖屏设置

我们在开发一款游戏之前一定会考虑的一件事就是,我们的游戏是支持横屏还是竖屏,又或者是横竖屏都支持.那么如何在xcode中对项目进行设置呢?下面我就在xcode5.1.1中利用cocos2dx2.2.3,从新建项目开始,来进行游戏横竖屏的设置. 一.新建项目 找到cocos2dx相应目录,利用python脚本新建项目,在MAC的终端输入如下命令(此处为我的目录位置,项目名与包名任意命名): cd /cocos2d-x-2.2.3/tools/project-creator python creat

android-screenOrientation 横竖屏设置

1.xml中设置,这个主要是在AndroidManifest.xml 中查找activity,然后在里面设置属性,如下 <application android:label="@string/app_name" android:icon="@mipmap/ic_launcher_calculator"> <activity android:name="Calculator" android:theme="@style/

iOS横竖屏设置

1.如果你的整个应用程序设置的是竖屏,如下: 如果你要应用的某个界面变为横屏,侧需要在该界面控制器中添加如下代码(前提是界面是present进去的,不是push进去的,消失要用dismiss) 1 - (BOOL)shouldAutorotate{ 2 return NO; 3 } 4 - (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation{ 5 return UIInterfaceOrientationLan

转:Android Activity 常用功能设置(全屏、横竖屏等)

Activity全屏设置 方式1:AndroidManifest.xml <activity android:name="myAcitivty"  android:theme="@android:style/Theme.NoTitleBar.Fullscreen" /> 方式2:代码实现 requestWindowFeature(Window.FEATURE_NO_TITLE); // 隐藏标题栏 getWindow().setFlags(WindowM

Android Activity 常用功能设置(全屏、横竖屏等)

Activity全屏设置 方式1:AndroidManifest.xml <activity android:name="myAcitivty"  android:theme="@android:style/Theme.NoTitleBar.Fullscreen" /> 方式2:代码实现 requestWindowFeature(Window.FEATURE_NO_TITLE);  // 隐藏标题栏 getWindow().setFlags(Window

Android横屏竖屏设置

Android横竖屏设置: 方法一:onCreate()中 setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); //横屏 setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); //竖屏 方法二:AndroidManifest.xml中 android:screenOrientation="landscape" //横屏 an

Android横竖屏切换处理

Android横竖屏要解决的问题应该就两个: 1.布局问题:2.重新载入问题   一.布局问题: 如果不想让软件在横竖屏之间切换,最简单的办法就是在项目的AndroidManifest.xml中找到你所指定的activity中加上android:screenOrientation属性,他有以下几个参数: "unspecified":默认值 由系统来判断显示方向.判定的策略是和设备相关的,所以不同的设备会有不同的显示方向. "landscape":横屏显示(宽比高要长

ANDROID N 分屏设置

一 概述 android N的发布,最大的亮点有2个,原生系统对应用分屏的支持和快捷回复.现在只介绍分屏功能,目前最新的Android N系统支持横屏时让两个APP并排,竖屏时上下排放,而在Android TV上,原生系统也支持APP实现画中画.用户还可以在这两个App之间拖动数据,例如将一个App的Activity上的文件拖动到另外一个App的Activity中去. 用户开启分屏模式: 1点击右下角的方块,进入任务管理器,长按一个App的标题栏,将其拖入屏幕的高亮区域,这个App金进入了分屏模

Android横竖屏切换总结

Android横竖屏切换总结(Android资料) Android横竖屏要解决的问题应该就两个: 一.布局问题 二.重新载入问题 1.布局问题:如果不想让软件在横竖屏之间切换,最简单的办法就是在项目的AndroidManifest.xml中找到你所指定的activity中加上android:screenOrientation属性,他有以下几个参数: "unspecified":默认值 由系统来判断显示方向.判定的策略是和设备相关的,所以不同的设备会有不同的显示方向. "lan