2012-10-09 3 views
11

O ile wiem, prawidłowa praktyka na iOS 6 jest napisanie kodu tak, aby obsługiwać AutoRotation:Jaki jest sens iOS 6 - (BOOL) powinienAutorotować?

// iOS 6 
- (BOOL)shouldAutorotate { 
    return YES; 
} 

- (NSUInteger)supportedInterfaceOrientations { 
    return UIInterfaceOrientationMaskPortrait; 
} 

zamiast pisać

// pre-iOS 6 support 
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation { 
    BOOL retVal = UIInterfaceOrientationIsLandscape(toInterfaceOrientation); 
    return retVal; 
} 

Szczerze mówiąc, myślę, że przed -iOS 6 jest o wiele bardziej przejrzysty: nie rozumiem sensu posiadania 2 metod radzenia sobie z autorotacją, zwłaszcza, że ​​widziałem -(BOOL) shouldAutorotate powracając YES we wszystkich przykładach. Czy czegoś brakuje?

Odpowiedz

8

Nowe API pozwala zaoszczędzić połączenia, aby uzyskać bieżącej orientacji urządzenia: dwa pytania, mianowicie

  • , czy aplikacja powinna Autoobracanie, bez względu na nowej pozycji, a
  • Jakie są orientacje obsługiwane przez urządzenie?

są najczęściej odbierane statycznie, bez wykonywania połączenia sprawdzającego aktualną orientację. Oszczędności stają się ważniejsze, gdy na ekranie jest wiele widoków kontrolowanych przez osobne kontrolery widoku.

Od czasu iOS nawiązuje połączenie z shouldAutorotate aplikacji w odpowiedzi na zdarzenie z przyspieszeniomierza, zna już nową orientację; jeśli aplikacja odpowiada "TAK", system iOS może następnie sprawdzić bieżącą orientację względem listy obsługiwanych i wydać decyzję bez sprawdzania aplikacji pod kątem bieżącej orientacji.

W mało prawdopodobnym przypadku, gdy Twoja aplikacja musi podjąć decyzję o automatycznym obrocie w oparciu o nową orientację, nowy interfejs API nie jest gorszy od starego, więc jest to sytuacja "wygrana-losowanie".

+1

jest w rzeczywistości gorszy. UInterfaceOrientationIsLandscape nie mówi mi, czy interfejs w pionie lub w pionie jest odwrócony. I co musimy teraz zrobić, gdy musimy powiedzieć "Tak, obróć, ale tylko jeśli chcesz obrócić do portretu"? Nie mogę teraz sprawdzić "ToInterfaceOrientation" przed UIInterfaceOrientationMaskPortrait, ponieważ nie ma go w nowym "shouldAutorotate". – Indoor