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

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

有时无论怎么调整,约束优先级都要大于某个值,只是焦点的俩个能够在大于某个值的范围内取大小值。ios

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

- (void)willTransitionToTraitCollection:(UITraitCollection *)newCollection布局

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

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

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

iPhone 竖屏时,horizontalSizeClass为compact的it

         而verticalSizeClass为regular的io

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

在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

相关文章
相关标签/搜索