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

相關文章
相關標籤/搜索