Как правильно переключиться в альбомную ориентацию? - PullRequest
0 голосов
/ 07 марта 2012

У меня есть табличное представление с некоторыми словами, и я представляю пейзажное представление стиля флэш-карты, когда устройство вращается. Я сделал это, наблюдая "UIDeviceOrientationDidChangeNotification".

[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(openLandscapeMode) name:@"UIDeviceOrientationDidChangeNotification" object:nil];

1) Это работает нормально и плавно, но проблема в том, что когда мы находимся в ландшафте, я не хочу, чтобы контроллер вида реагировал на вращение вокруг вертикальной оси, чтобы я мог положить телефон на стол и все равно будет в ландшафте. Может быть, я должен как-то наблюдать горизонтальные спиннинги, а не приборную ориентацию?

-(void)openLandscapeMode
{

    if([[UIDevice currentDevice]orientation]==UIDeviceOrientationLandscapeLeft||[[UIDevice currentDevice]orientation]==UIDeviceOrientationLandscapeRight)
    {
        LandscapeCardViewController *landscape = [[LandscapeCardViewController alloc]init];
        landscape.words = words;
        landscape.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
        [self presentModalViewController:landscape animated:YES];
        NSLog(@"Switch to %@",[[NSUserDefaults standardUserDefaults]valueForKey:@"ChosenWordInCard"]);
        [landscape release];
    }
    else
    {
        [self dismissModalViewControllerAnimated:YES];  
        [[UIApplication sharedApplication]setStatusBarOrientation:UIInterfaceOrientationPortrait];

    }
}

2) Второй вопрос: где удалить наблюдателя, если этот контроллер находится в панели вкладок, и я хочу выполнить такой же переход в другом контроллере в той же панели вкладок, но, конечно, в другом альбомном виде? Я пробовал в viewWillDissappear, но он не работает должным образом. Большое спасибо!

Ответы [ 2 ]

2 голосов
/ 07 марта 2012

Для вашего первого вопроса, в вашем viewcontroller должен быть метод, который вам, возможно, потребуется отредактировать, чтобы он поддерживал только портрет

-(BOOL)shouldAutorotateToInterfaceOrientation: (UIInterfaceOrientation)interfaceOrientation {
return UIInterfaceOrientationPortrait(interfaceOrientation); //only allow portrait
}

, который остановит автоматический поворот в альбомную ориентацию, сохраняя при этом ваш оригинальный метод без изменений

Для второго.Как насчет того, когда переход завершен?Затем добавьте его снова, когда вид снова появится.А затем в свой ландшафтный контроллер, добавьте его, чтобы повторно обнаружить, когда устройство является портретным.

0 голосов
/ 27 марта 2012

Я нашел решение Я изменил еще на if([[UIDevice currentDevice]orientation]==UIDeviceOrientationPortrait||[[UIDevice currentDevice]orientation]==UIDeviceOrientationPortraitUpsideDown) и все работает отлично!Странно, но это работает!

Об удалении наблюдателя - я делаю это в -viewWillAppear, проверяя, не сейчас ли я в пейзаже.

...