2014-10-11 68 views
15

在iOS 8上運行時,我需要在旋轉我的應用程序時更改UI。iOS 8方向更改檢測

目前我使用此代碼:

-(BOOL)shouldAutorotate 
{ 
    UIDeviceOrientation orientation = [[UIDevice currentDevice] orientation]; 
    if (orientation != UIInterfaceOrientationUnknown) [self resetTabBar]; 

    return YES; 
} 

我做它刪除當前用戶界面,並添加適當的方向的新UI。但是,我的問題是,每次進行一次旋轉時,這種方法就會被調用大約4次。

在iOS 8中更改方向更改的正確方法是什麼?

+6

爲什麼你用這個方法改變界面呢?我認爲它只是爲了回答旋轉或不旋轉的問題。對於iOS 7,使用'willRotateToInterfaceOrientation:duration:'和iOS8的'viewWillTransitionToSize:withTransitionCoordinator:'。 – 2014-10-15 07:57:56

+0

剛問過一個問題,人們試圖幫助但沒有打擾接受答案或評論任何細節。對不起,但那不好。 – bisma 2016-06-23 11:23:18

回答

25

帖木兒Kuchkarov是正確的,但我會發布答案,因爲我第一次檢查這個網頁時,我錯過了他的評論。

的iOS檢測取向變化(旋轉)實施視圖控制器的下述方法8方法:

- (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator 
{ 
    // Do view manipulation here. 
    [super viewWillTransitionToSize:size withTransitionCoordinator:coordinator]; 
} 

注:控制器的觀點尚未轉換至該尺寸此時,如果您的尺寸代碼依賴於視圖的當前尺寸,請小心。

+0

此外,我只注意到有關如何在[這個答案](http://stackoverflow.com/a/24072010/1057616)中使用'coordinator'的更好的細節。 – cloudrave 2014-12-30 06:08:03

+4

由於在視圖尚未轉換爲新大小時調用此方法,因此在視圖轉換爲新大小後會調用哪種方法? – VinceFior 2015-08-30 06:11:46

+1

您應該指出,每次輪換髮生變化時,此方法都不會觸發。它只會在特定的輪換情況下觸發。我在我的代碼中使用這種方法,並根據顯示的界面,有時它會觸發,有時它不會,這就是爲什麼我還必須包含viewWillLayoutSubviews來處理所有情況的原因。 – 2017-09-25 04:41:51

17

正如Nick指出的那樣,viewWillTransitionToSize:withTransitionCoordinator:方法在視圖轉換爲新尺寸之前立即被調用。然而,最好的方式來運行代碼立即後的看法已轉變爲新的大小是在使用的方法完成塊:

- (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator { 
    [coordinator animateAlongsideTransition:nil completion:^(id<UIViewControllerTransitionCoordinatorContext> context) { 
     // your code here 
    }]; 
} 

得益於this answer的代碼和尼克鏈接它在他的評論中。

+0

如何識別翻譯是否完成? – Satyam 2016-07-15 10:53:14

+0

@Satyam在轉換完成後,將由註釋表示的完成塊「//您的代碼在此處」運行。 – VinceFior 2016-07-16 04:45:18

+0

您應該指出,每次出現輪換更改時,此方法都不會觸發。它只會在特定的輪換情況下觸發。我在我的代碼中使用這種方法,並根據顯示的界面,有時它會觸發,有時它不會,這就是爲什麼我還必須包含viewWillLayoutSubviews來處理所有情況的原因。 – 2017-09-25 04:42:44