ios8之后的界面旋转简单原理

廉价感情. 提交于 2020-03-13 20:32:27

调整约束优先级,不一定都是250.750或者1000

有时不管怎么调整,约束优先级都要大于某个值,只是焦点的俩个可以在大于某个值的范围内取大小值。

ios8之后不用interfaceOrientation属性来判断视图控制器方向,也不用willRotation方法来监测视图控制器旋转。iOS认为宽>高时为横屏,高>宽时为竖屏。因为ipad有分屏多任务的可能,可能屏幕没有旋转,但宽高大小改变,需要重新布局界面。而用- (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id <UIViewControllerTransitionCoordinator>)coordinator 代替willRotataion方法,在方法里size表示要目的界面的大小,这样在屏幕旋转和屏幕没旋转但试图控制器宽高大小改变时都会走该方法。在该方法里进行相应布局就可以,iPhone和iPad都适用。需要注意的是需要先调用super 该方法。

- (void)willTransitionToTraitCollection:(UITraitCollection *)newCollection

  withTransitionCoordinator:(id <UIViewControllerTransitionCoordinator>)coordinator方法在屏幕方向发生旋转时也可以监测到。iPhone上实验通过,iPad没走通。也需要先super 该方法。然后调用[coordinator animateAlongsideTransition:^(id <UIViewControllerTransitionCoordinatorContext> context) { block …...} completion:nil];

在block的位置,可以根据newCollection的horizontalSizeClass和verticalSizeClass来判断是什么设备什么方向。这俩个值是枚举类型,分为regular普通和compact紧密俩个种类

ipad不论横竖屏,俩个方向均是regural的

iPhone 竖屏时,horizontalSizeClass为compact的

         而verticalSizeClass为regular的

横屏时,俩个方向均是compact的。

在5上没问题检测过,但ipad air2上不行,原因暂不明。

compact的值为1,而regular的值为2.

随着设备的变化,这个分类也会发生变动和更新。

参考:http://www.cocoachina.com/industry/20140729/9269.html

http://www.cocoachina.com/ios/20141026/10045.html

http://www.mamicode.com/info-detail-246989.html

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!