最近做项目遇到了屏幕旋转的问题,先说一下我的需求吧:app除了视频播放这一个界面支持横竖屏外,其他界面都只支持竖屏,并且在视屏播放这个界面,不支持手机自动旋转,只能通过点击放大按钮,将播放器变为横屏放大。
一、关于orientation
屏幕旋转有两种:
1.设备的物理方向(device orientation),即app级别的;
2.界面显示的方向(interface orientation),即viewcontroller级别的。
二、如何设置orientation
我们可以在info里面配置我们app支持的方向信息,也就是设备的物理方向,如下图,默认情况下,Upside Down没有勾选,其他的都选了。
为什么没有勾选Upside Down呢?因为iphone的电话app是不支持Upside Down 的,如果你的app支持Upside Down,当用户正在使用你的app的时候,突然有电话进来了,就会看到整个来电画面是颠倒的,用户体验不好,所以不建议勾选。
重点来了!!!!因为我们要实现除了视频播放页之外,其他界面都只支持竖屏,所以在Appdelegate.m 里面要写上如下代码:
#pragma mark 禁止横屏显示
#pragma mark 这个代理方法的优先级最高,self.allowRotation = 0,那么UI界面只支持竖屏;self.allowRotation = 1,根据自己需求返回相应的方向
-(UIInterfaceOrientationMask)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window
{
if (self.allowRotation) {
//根据自己需求,返回相应的方向
return UIInterfaceOrientationMaskLandscapeRight;
}
return UIInterfaceOrientationMaskPortrait;
}
Appdelegate.h里如下:
我们在视频播放页面将allowRotation设置为YES即可,代码如下:
NTESAppDelegate *appdelagate = [UIApplication sharedApplication].delegate;
appdelagate.allowRotation = YES;
便可以实现,除视频播放页面外,其他都只支持竖屏显示的需求
三、根视图中的设置
这一点很重要,因为经常会被忽略掉,就是:必须在根视图设置相应的代码,否则播放器界面不能实现真正的横屏放大的效果。我的根视图是viewcontroller。(虽然实现效果了,但是不知道为啥,我这里即便设置了shouldAutorotate方法,但是我的播放器界面的shouldAutorotate方法,仍然不走,如果有知道的大神,还请不吝赐教!!)
四、播放器视图中的设置
我的需求是:点击按钮,播放器横屏放大