关于iOS屏幕方向,让你找到方向感
看了这篇文章,可能是我太笨,有可能是作者太牛逼,反正我是没看懂,都没下他写的demo
写的什么鬼,自己来搞一搞
原文链接:http://lvwenhan.com/ios/458.html
新建一个空项目,在target->General->Deployment Info中勾选
- Protrait
- Landscape Left
- Landscape Right
不然只会支持你所选择的方向(那就没得玩了)
然后再Main.storyboard中拖入一个按钮,放到左上角一些,why?因为不在界面上放个东西,改变方向你会晕的
现在run,手动改变方向command+⬅️
,效果给你个截图
可以看到屏幕的方向会随着设备的方向而改变,Landscape Left(顺时针转,home键在左),如果用户锁定了屏幕旋转,那就不用讨论设备转向的情况下屏幕跟随转向的问题了
1 | //file ViewController.m |
显而易见的,这个方法控制我们的页面是否跟随设备转动而改变方向
我们研究这个的目的是不管用户是否锁定屏幕转向,我们在打开新页面的时候,也需要手动控制viewController显示的方向
现在我们新建一个SecondViewController类,往Main.storyboard中拖入一个viewController,绑定SecondViewController,Storyboard ID:secondVC
写代码跳转,像这样…
加入这个代码到SecondViewController.m中,强制设置屏幕方向,不一定能通过苹果审核噢
1 | - (void)viewDidLoad { |
时光不能倒流,回不去,对吧,呵呵,强制设置,你可以试试在退出的时候再设置回来,对吧
1 | - (BOOL)shouldAutorotate |
如果在加入这个,呵呵,上面那段代码不是扯淡?
去掉UIDeveice的代码,继续搞…
1 | //file viewController.m的代码是这样 |
百度了一下很多的帖子,实际写代码,不用重写以下方法,why?自我理解,因为我们是自己手动管理屏幕方向,由我们控制每个viewController的显示方向
1 | - (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation |
在我们使用的过程中,通常我们是嵌套viewController,比如N+V或者T+N+V等等
在Main.storyboard中给ViewController套一个navigationController
Editor->Embed In->Navigation Controller
然后run
我们发现,viewController会跟随设备旋转了,新建一个navigationController类,在该类里控制,记住与Main.storyboard中绑定1
2
3
4
5
6
7
8
9
10//file ViewNavigationController.m
// 这是一个navigationController
- (BOOL)shouldAutorotate
{
return NO;
}
- (NSUInteger)supportedInterfaceOrientations
{
return UIInterfaceOrientationMaskPortrait;
}
此时的Main.storyboard:
效果:
看对了吧,此时不管你有没有注释ViewController中的代码,都不会有问题
TabBarController也一样
所以这个就好理解了吧…,下面的是swift代码,你看不懂?抱歉,我不怎么会,能看懂
1 | // tabbarController |
总结一下.
- 设备的方向和状态栏所在的位置不一样噢(这个知道,不过忘记了)
- viewController是否支持自动旋转是由自身控制
- 如果嵌套的话由父viewCotroller来控制