2012-10-01 17 views
5

Moja aplikacja ma kontrolery widoku podklasujące shouldautorotateToInterfaceOrientation. I w nim decyduję o rotacji każdego widoku. Działa to poprawnie. Ale w iOS6, choć czytam dokumenty dostarczone przez Apple, nie mogę tego zrozumieć.Nie mogę zrozumieć mechanizmu obrotu w iOS6

Moja aplikacja ma kontroler nawigacyjny jako kontroler widoku root. Ten kontroler nawigacyjny ma kontroler kart. Kontroler kart ma kilka kontrolerów widoku. Chcę, aby pierwszy kontroler widoku (w kontrolce kart) był wyświetlany tylko w trybie pionowym, a drugi kontroler widoku (w kontrolce kart) wyświetlał tryb portretowy i poziomy. Działa poprawnie w systemie iOS5. Ale nie wiem jak zrobić to w iOS6. Chociaż wiem, że powinienem podklasę supportedInterfaceOrientations, to nie działa, gdy rotacja się wydarzy. Ku mojemu zaskoczeniu jest wywoływane, gdy wyświetla się widok. Jak zrobić to, co chcę?

Dziękuję za przeczytanie.

+0

należy zdefiniować obsługiwany Orientacja dla ciebie aplikacji w '-application: supportedInterfaceOrientationsForWindow:' 'AppDelegate.m' w pliku lub w' Info.plist' a swoimi view odpowiedziałaby tylko metodą '-shouldAutorotate:' z wartością 'BOOL', jeśli twój widok obsługuje predefiniowane orientacje, czy nie. "- shouldAutorotateToInterfaceOrientation:" jest przestarzałe w iOS6. – holex

+0

Dziękuję holex. Rozwiązałem to. – eon

Odpowiedz

0

Gdy używasz UINavigationController lub UITabbarViewController - aplikacja zawsze robi to, co mówią w ich shouldAutorotate, supportedInterfaceOrientations metod.

Możesz dodać kategorię, aby przekierować te metody do kontrolera, który aktualnie wyświetlają. Jak to:

@implementation UINavigationController (Rotation_IOS6) 
-(BOOL)shouldAutorotate 
{ 
    return [[self.viewControllers lastObject] shouldAutorotate]; 
} 

-(NSUInteger)supportedInterfaceOrientations 
{ 
    return [[self.viewControllers lastObject] supportedInterfaceOrientations]; 
} 

- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation 
{ 
    return [[self.viewControllers lastObject] preferredInterfaceOrientationForPresentation]; 
} 
@end 

Podobny do UITabbarViewController.

+0

Może to mieć niezamierzone skutki uboczne. Pomyśl o tym, jeśli to zrobisz, to jest zachowanie WSZYSTKICH kontrolerów nawigacyjnych w całym systemie, nawet jeśli są przedstawiane przez system operacyjny. Z tego powodu mam awarię. Podklasowanie jest lepsze, ponieważ pozostajesz pod kontrolą tego, kto otrzymuje specjalne zachowanie, a kto nie. – n13

Powiązane problemy