iOS开发 转屏控制 (shouldAutorotate/supportedInterfaceOrientations)不起作用
需求是这样的:
在控制器A中, 不允许转屏, 只能是竖屏
push到控制器B之后, 允许控制器自动转屏幕
实现方式
正常的实现逻辑中, 只需要在控制器A中实现以下
- (BOOL)shouldAutorotate {return NO;
}
- (UIInterfaceOrientationMask)supportedInterfaceOrientations {return UIInterfaceOrientationMaskPortrait;
}
就可以实现了
但是今天遇到这么个问题, 无论怎么设置, 这些代码也执行, 但是都不起作用, 屏幕依然可以旋转.
问题
大概的查了一下, 跟UINavigationController
, UITabBarController
相关的控制器, 会默认的走这两个基类的转屏方法, 自己写的这个就不会生效了, 检查appDelegate
中发现如下代码:
LCPlayerViewController *mainViewController = [[LCPlayerViewController alloc] initWithNibName:@"LCPlayerViewController"bundle:nil];UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:mainViewController];navigationController.navigationBarHidden = YES;self.navigationController = navigationController;self.window.rootViewController = self.navigationController;[self.window makeKeyAndVisible];return YES;
解决方法
由于基本是UINavigationController
, 所以跟上面说的那个一致, 自己实现的shouldAutorotate
等方法不管用了, 于是解决办法如下:
LECBaseNavigationController *navigationController = [[LECBaseNavigationController alloc] initWithRootViewController:mainViewController];
把创建的Nav变成了自己的一个Nav子类, 定义如下:
#import "LECBaseNavigationController.h"@interface LECBaseNavigationController ()@end@implementation LECBaseNavigationController- (void)viewDidLoad {[super viewDidLoad];
}- (BOOL)shouldAutorotate {return self.topViewController.shouldAutorotate;
}- (UIInterfaceOrientationMask)supportedInterfaceOrientations {return self.topViewController.supportedInterfaceOrientations;
}- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation {return self.topViewController.preferredInterfaceOrientationForPresentation;
}@end
重写了三个跟转屏相关的方法, 把转屏的控制归还给实际的控制器, 再编译运行, 就可以实现自己的控制器控制自己转屏方向了.
代码在这
https://github.com/dfzr86/ScreenOrientationsDemo
作者:__zimu
链接:https://www.jianshu.com/p/1c8d71deded8
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
iOS开发 转屏控制 (shouldAutorotate/supportedInterfaceOrientations)不起作用相关推荐
- T语言与快速开发平台之天宇联iOS开发手册
天宇联IOS开发手册 控制包ttyu.controller 1. 通用类Command 方法 说明 - (voidGetFunctionValue (NSString *dataMember) ...
- iOS开发Swift篇—(六)流程控制
iOS开发Swift篇-(六)流程控制 一.swift中的流程控制 Swift支持的流程结构如下: 循环结构:for.for-in.while.do-while 选择结构:if.switch 注意:这 ...
- iOS 开发 高级:通过AirServer使用AirPlay镜像并实现多屏幕显示控制
AirPlay是iOS中一个很酷的功能,通过Wi-Fi连接支持AirPlay的设备,然后使用镜像功能就能在其他设备显示内容,播放声音.有很多大型的游戏都支持AirPlay,这样比如连接电视时,那么iP ...
- iOS开发中屏幕旋转(二)
Morris_ 2019.04.11 前面有总结过一些在开发中遇到的屏幕旋转的基础知识. 一.设置应用支持的转屏方向 设置方式 00x1 在TARGET->General->Deploym ...
- iOS开发中屏幕旋转(一)
Morris_ 2018.11.24 前言 最近做一个关于在线视频互动的iPad项目,部分界面只要横屏,部分界面可以横竖屏转换.看了看别家做的项目,有些是只做竖/横屏,有些是支持了横竖屏转换,在iPa ...
- iOS开发常用代码片段:总有你用得上的功能
使用方法:查看文章目录,查找需要的功能. 代码片段目录 1.禁止手机睡眠 2. 隐藏某行cell 3.禁用button高亮 4..切换window的根控制器 5.去除数组中重复的对象 6.给一个vie ...
- iOS开发系列–音频播放、录音、视频播放、拍照、视频录制
iOS开发系列–音频播放.录音.视频播放.拍照.视频录制 - KenshinCui - 博客园 代码改变世界 Posts - 69, Articles - 0, Comments - 1004 Cnb ...
- iOS开发UI篇—transframe属性(形变)
iOS开发UI篇-transframe属性(形变) 1. transform属性 在OC中,通过transform属性可以修改对象的平移.缩放比例和旋转角度 常用的创建transform结构体方法分两 ...
- iOS开发——手势识别器(用手势实现图片旋转和缩小放大)
iOS开发中,除了有关触摸的这组方法来控制用户的手指触控外,还可以用UIGestureRecognize的衍生类来进行判断,方便了开发. UIGestureRecognize的子类类别有以下几种: U ...
最新文章
- 使用Wireshark进行DNS协议解析
- So Hot ?快给 CPU 降降温!
- Linux C编程Makefile编写初步-转
- MySQL入门第三天(下)——存储过程与存储引擎
- CTFHUB Web前置技能 题解记录(HTTP部分)
- 苹果iPad手机如何无线投屏电脑使用教程
- 计算机基础access2010实训,大学计算机基础access实验.doc
- 哪个软件可以玩java游戏_安卓java模拟器?安卓手机如何玩JAVA游戏以及JAVA软件的方法...
- 好员工为什么离你而去
- java 读取文本_Java如何读取txt文件的内容?
- 服务器按f11才能进系统,电脑每次开机都需要按f11进入选择开启项才能开启系统,...
- 小白Mac C/C++ for Visual Studio Code配置
- 微信小程序 五 npm 包 、安装 vant组件、promise组件、全局数据共享、 分包!!!、自定义 tabBar 案例
- VNC Viewer建立多个图形界面,来远程访问同一个服务器(Ubuntu)
- 专知 2019/4/24(图像填充方法大全)
- V4L2视频驱动框架---v4l2_device管理模块简述
- 自动挡汽车开车教程,这十点要铭记在心
- 用Prophet预测USDCNY走势--------仿照forecasting-stock-perfomance-with-prophet对美元人民币走势进行预测
- [UOJ#207]共价大爷游长沙
- SHARP GP2Y1014笔记
热门文章
- 设计师学python有意义吗-如果你有设计师朋友,请对TA好一些...
- Shapes布局-文字环绕动画
- python wx.frame框架属性
- WPF入门第四篇 WPF模板
- python编写贪吃蛇游戏下载,python实现简单的贪吃蛇游戏
- Liferay好文收集
- BS(Brower/Server)浏览器/服务器 和 C/S (Client/Server)客户端/服务器 的区别
- HMM的概述(五个基本元素、两个假设、三个解决的问题)
- EMC (电磁兼容性)
- C# 窗体制作Aero效果