Переключение в альбомную ориентацию и использование контроллера панели вкладок - PullRequest
1 голос
/ 12 ноября 2011

Я использую контроллер панели вкладок для моего приложения. Если я нахожусь в одном из контроллеров представления, называемых «результатами», и устройство ios поворачивается в ландшафтный режим, оно переключается на другое созданное мной представление, называемое landScape. Это было сделано в рамках метода

-(void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrient‌​ation duration:(NSTimeInterval)duration
{
    [super willRotateToInterfaceOrientation:toInterfaceOrientation duration:duration];
    if (toInterfaceOrientation == UIInterfaceOrientationLandscapeRight ||
        toInterfaceOrientation == UIInterfaceOrientationLandscapeLeft)
    {
        self.view=landScape;
    } else {
        self.view=originalView;
    }
}

Он работает просто отлично, когда я нахожусь в этом конкретном контроллере в панели вкладок (пример контроллера просмотра результатов). Тем не мение; Если я перехожу к другому элементу в моем контроллере панели вкладок, и мой телефон наклоняется в ландшафтном режиме, а затем я решаю перейти к resultsviewcontroller, он не вызывает мой вид landScape, вместо этого он пытается автоматически изменить размер представления и выглядит ужасно. Должен ли я вызвать метод - (void) willRotateToInterfaceOrientation: (UIInterfaceOrientation) toInterfaceOrientation duration: (NSTimeInterval) продолжительность в моем методе viewDidLoad для решения проблемы? Или это совершенно неправильно?

Заранее спасибо!

1 Ответ

2 голосов
/ 12 ноября 2011

Проблема в том, что вы устанавливаете resultsViewController.view, только когда он является активным контроллером вида и обнаруживает вращениеПопробуйте это:

- (void)setViewForInterfaceOrientation:(UIInterfaceOrientation)orientation
{
    self.view = UIInterfaceOrientationIsPortrait(orientation)
        ? originalView
        : landScape;
}

- (void)viewWillAppear
{
    [self setViewForInterfaceOrientation:[[UIDevice currentDevice] orientation];
    [super viewWillAppear];
}

-(void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrient‌​ation duration:(NSTimeInterval)duration
{
    [self setViewForInterfaceOrientation:toInterfaceOrientation];
    [super willRotateToInterfaceOrientation:toInterfaceOrientation duration:duration];
}
...