簡體   English   中英

iOS 8和以前版本中的自動旋轉之間的區別

[英]Difference between autorotation in iOS 8 and prior versions

當我制作以編程方式創建的視圖控制器時,出現了這個問題。 該控制器應該支持任何接口方向。 而據好習慣,我在創建子視圖-viewDidLoad和建立自己的框架-viewWillLayoutSubviews 這樣的方法很好,因為-viewWillLayoutSubviews不僅可以在開始時布局子視圖,而且還可以處理界面旋轉以及視圖控制器視圖的其他更改。

在iOS 8上一切正常,但是當我在iOS 6和7上運行該應用程序時,布局被破壞了。 我發現原因是布局基於self.view.frame屬性。 並且,如果您嘗試在不同iOS版本的-viewWillLayoutSubviews上打印框架,則當設備處於橫向模式時,您將獲得不同的結果。

- (void)viewWillLayoutSubviews
{
    [super viewWillLayoutSubviews];
    NSLog(@"%@", NSStringFromCGRect(self.view.frame));
}

在iOS 8上輸出(將設備轉到橫向模式后):

2014-10-07 17:35:11.028 BlaBlaApp [361:12587] {{0,0},{568,320}}

在iOS 7和iOS 6上的輸出(相同的設備方向):

2014-10-07 17:35:11.028 BlaBlaApp [361:12587] {{0,0},{320,568}}

在iOS 7和6上,當設備方向更改時,視圖框架不會更改。 但是對我來說,顯然可見區域發生了變化! 我決定研究一下界面旋轉的實際工作原理。

在iOS 7和6上,通過更改其transform屬性( frame未更改)來旋轉視圖。 反過來,在iOS 8上,視圖控制器視圖的transform屬性始終等於CGAffineTransformIdentity ,並且frame會根據方向發生變化。

我設法用一串代碼(沒有宏和if語句)解決了我的問題:

CGRect actualFrame = CGRectApplyAffineTransform(self.view.frame, self.view.transform);

在任何iOS版本上, actualFrame視圖都可以根據actualFrame以類似的方式定位。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM