iOS9横屏竖屏设置

来源:互联网 发布:淘宝天下天下网商区别 编辑:程序博客网 时间:2024/06/10 14:48
公司App里面有个需求,即所有界面都是竖屏,且不允许横屏切换,唯独有一个播放视频的界面允许横屏,大家都知道视频播放适配最大的播放屏幕那样是最好的。从网上多方查找资料,查到了这么一篇文章:
  1. 最终,根据此需求处理如下: 首先,确保App本身应该允许转屏切换:
    这里写图片描述

  2. 我的App里面UITabBarController是根视图控制器,所以首先创建一个UITabBarController的子类,并设定允许转屏:
    (这些要放在根视图控制器里面, 如果你的应用根视图是UINavigationController, 就放在那里面就好)

#pragma mark 转屏方法重写//返回支持的方向 -(UIInterfaceOrientationMask)supportedInterfaceOrientations{    return [self.viewControllers.firstObject supportedInterfaceOrientations];}//是否自动旋转,返回YES可以自动旋转 -(BOOL)shouldAutorotate{    return self.viewControllers.firstObject.shouldAutorotate;}

3.接着,我的tabbarController里面每个子控制器又都是UINavigationController进行界面push切换的,所以首先创建一个UINavigationController的子类,并设定允许转屏:

//self.topViewController是当前导航显示的UIViewController,这样就可以控制每个UIViewController所支持的方向啦!-(BOOL)shouldAutorotate{    return [self.topViewController shouldAutorotate];}- (UIInterfaceOrientationMask)supportedInterfaceOrientations {    return [self.topViewController supportedInterfaceOrientations];}

4.在你想转屏切换的ViewController上可以照这样重写(允许左右横屏以及竖屏):

- (BOOL)shouldAutorotate {    return NO;}- (UIInterfaceOrientationMask)supportedInterfaceOrientations {    return UIInterfaceOrientationMaskPortrait;}

5.到视频播放界面要设置为横屏啦(我的视频播放只要横屏就好^_^)

// 是否支持屏幕自动旋转,YES自动旋转- (BOOL)shouldAutorotate {    return NO;}- (UIInterfaceOrientationMask)supportedInterfaceOrientations {    return UIInterfaceOrientationMaskLandscape;}//返回优先方向 -(UIInterfaceOrientation)preferredInterfaceOrientationForPresentation {    return UIInterfaceOrientationLandscapeRight;}

注意:跳转到播放器要使用模态进来, 用Push不会横屏。具体原因不清楚,有了解的麻烦告知一下
[self presentViewController:playerVC animated:YES completion:nil];

总结

  • 如果需求仅仅是少量几个控制器横屏显示,可以定义一个UIViewController的子类作为你的BaseViewController,其他控制器继承自他就好了,只在需要横屏的重写那是3个方法,不用每个控制器都写
  • demo地址

还有一种比较霸道的私有方法,方便实用,但是听说有风险,容易被拒

#pragma - 屏幕屏幕方向- (void)interfaceOrientation:(UIInterfaceOrientation)orientation {    // arc下    if ([[UIDevice currentDevice] respondsToSelector:@selector(setOrientation:)]) {        SEL selector = NSSelectorFromString(@"setOrientation:");        NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:[UIDevice instanceMethodSignatureForSelector:selector]];        [invocation setSelector:selector];        [invocation setTarget:[UIDevice currentDevice]];        int val = orientation;        [invocation setArgument:&val atIndex:2];        [invocation invoke];    }}## 直接在当前控制器调用就行,支持push方式的控制器跳转
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 平板突然黑屏开不了机了怎么办 苹果ipad锁屏密码忘了怎么办 公司发资以两张工资表怎么办 面试谈好的工资结果发少了怎么办 老板面试没谈薪资让等电话怎么办 土地局把我的档案弄丢了怎么办 人事关系在医院不去上班怎么办 档案年龄多处涂改无法退休怎么办 个人办理退休原始档案丢了怎么办 在钢厂工作想辞职了怎么办呢 场地合同到期了公司不续签怎么办 应届生没毕业找到工作怎么办入职 公司工资保密同事要看工资条怎么办 考上特岗教师后和老公异地怎么办 档案在无档案保管权限的公司怎么办 辞职了户口迁回农原籍不接收怎么办 当正职直接指挥下级副职领导怎么办 单位申报个税身份证号码填错怎么办 申报个税身份证号码填错了怎么办 办了人事代理联系函商调函怎么办 劳务公司与分包工头算账成怎么办 客户退保业务员己得保险佣金怎么办 投了简历公司打来电话没接到怎么办 跟老板要工资她说过几天怎么办 公路车弯把手小抓不到刹车怎么办 新手骑电动车上路车子一直晃怎么办 不知情收赃东西已经卖了怎么办 档案和派遣证不在同一个地方怎么办 档案缺招工表和派遣证怎么办退休 开发商对接的银行利息比较高怎么办 工作未满一年离职转正定级怎么办 被网络骗贷翻到几十万怎么办 面试通过后迟迟不通知入职怎么办 厂里捡到饭卡花了里面的钱怎么办 上班用自己手机打卡没电怎么办 逸尚考勤机显示超出考勤记录怎么办 下雨穿套裙工装上班好冷怎么办 蚂蚁借呗放款中不到账怎么办 护士电子化注册没有激活码怎么办? 地铁站务员入职体检身高差点怎么办 车子钥匙锁在车里了怎么办