6

Używam splitviewcontroller jako rootview mojej aplikacji. Muszę pokazać widoki logowania i rejestracji jako widok modalny na wierzchu kontrolera splitview. Kiedy próbuję wyświetlać widok logowania/reg z metody viewdidAppear właściciela rootViewController, nie jest on wyświetlany. Próbowałem prezentując pogląd logowanie/Reg od sposobu didFinishLaunching w Appdelegate za pomocą następującego koduUISplitViewController i orientacja - iOS <5.0

[self.window.rootViewController presentModalViewController:self.navController animated:NO]; 

i to działa.

Mój problem polega na tym, że aplikacja obsługuje zarówno orientacje w orientacji poziomej, ale gdy uruchomię ją w urządzeniu, bez względu na to, w której orientacji trzymam urządzenie, dostaję tylko orientację poziomą jako orientację. Więc jeśli trzymam urządzenie w orientacji LandscapeLeft, aplikacja wyświetla z ekranem logowania do góry nogami. Używam LandscapeLeft & Prawo w obsługiwanych orientacji na info.plist.

Proszę, pomóż mi rozwiązać problem. W jaki sposób przedstawimy widok, gdy mamy splitViewcontroller jako rootview aplikacji?

W iOS 5.0 (tylko) Jestem w stanie przedstawić widok logowania z kontrolera rootviewcontroller kontrolera view - viewdidAppear. We wszystkich innych wersjach systemu operacyjnego ten przypadek nie działa i muszę go przedstawić za pomocą metody didFinishLaunching Appdelegate.

+0

W kontrolerze na ekranie logowania zaimplementowałeś '- (BOOL) shouldAutorotateToInterfaceOrientation: (UIInterfaceOrientation) interfaceOrientation' dla dwóch orientacji, których potrzebujesz? –

+0

Prawidłowy sposób powinien pochodzić z metody viewDidAppear użytkownika splitViewController, która według Ciebie działa na iOS 5. Czy możesz podać jej źródło, abyśmy mogli zobaczyć, jak wygląda? Może coś tam można zrobić inaczej. –

Odpowiedz

0

Jeśli dobrze pamiętam, iOS nieprawidłowo zgłasza faktyczną orientację do pierwszego obrotu.

Również IIRC, używając [[UIApplication sharedApplication] statusBarOrientation], omija ten problem.

-1

Po usunięciu widoku logowania z okna ustaw kierunek rootviewcontroller zgodnie z orientacją urządzenia za pomocą następującego kodu.

#define DegreesToRadians(x) ((x) * M_PI/180.0) 

[LoginviewContoller.view removeFromSuperview] 

self.viewController = [[[ExampleViewController alloc] initWithNibName:@"ExampleViewController" bundle:nil] autorelease]; 

switch(self.viewController.interfaceOrientation) 

{ 
case UIInterfaceOrientationPortrait:    
    NSLog(@"potrait");    
    break; 
case UIInterfaceOrientationPortraitUpsideDown: 
    NSLog(@"prtraitdown"); 
    break; 
case UIInterfaceOrientationLandscapeLeft: 
    self.viewController.view.transform = 
    CGAffineTransformMakeRotation(DegreesToRadians(270)); 
    NSLog(@"lanscapelef"); 
    break; 
case UIInterfaceOrientationLandscapeRight: 
    self.viewController.view.transform = CGAffineTransformMakeRotation(DegreesToRadians(90)); 
    NSLog(@"landcsape righ"); 
    break; 
} 

[self.window addSubview:self.viewController.view]; 

Załaduje kontroler Rootview zgodnie z orientacją urządzenia.

Powiązane problemy