UISplitViewController и ориентация - iOS <5.0 - PullRequest
6 голосов
/ 05 января 2012

Я использую splitviewcontroller в качестве корневого вида моего приложения. Мне нужно показать режимы входа и регистрации как модальное представление поверх контроллера splitview. Когда я пытаюсь представить представление login / reg из метода viewdidAppear корневого представления splitViewController, оно не отображается. Я попытался представить представление login / reg из метода didFinishLaunching в Appdelegate, используя следующий код

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

и все работает.

Моя проблема в том, что приложение поддерживает обе ландшафтные ориентации, но когда я запускаю его на устройстве, независимо от того, в какой ориентации я держу устройство, в качестве ориентации я получаю только LandscapeRight. Так что, если я держу устройство в ориентации LandscapeLeft, приложение запускается с экраном входа в систему вверх ногами. Я использую LandscapeLeft & Right в поддерживаемых ориентациях на info.plist.

Пожалуйста, помогите мне решить проблему. Кроме того, как мы представим представление, когда у нас есть splitViewcontroller в качестве корневого представления приложения?

В iOS 5.0 (только) я могу представить вид входа в систему с контроллера rootview контроллера splitview - метод viewdidAppear. Во всех других версиях ОС этот случай не работает, и мне нужно представить его из метода didFinishLaunching в Appdelegate.

Ответы [ 2 ]

0 голосов
/ 16 мая 2012

После удаления вида входа в систему из окна установите направление rootviewcontroller в соответствии с ориентацией устройства, используя следующий код.

#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];

Он загрузит контроллер Rootview в соответствии с ориентацией устройства.

0 голосов
/ 16 января 2012

Если я правильно помню, iOS искажает фактическую ориентацию до первого поворота .

Также IIRC, используя [[UIApplication sharedApplication] statusBarOrientation], обходит эту проблему.

...