Как разрешить вращение только одного представления в стеке навигации? - PullRequest
4 голосов
/ 06 февраля 2011

У меня есть ViewControllers A и B в стеке навигации.A не поддерживает альбомную ориентацию, B не поддерживает.Если пользователь поворачивает альбомную ориентацию при просмотре B, а затем нажимает кнопку «Назад», A теперь находится в альбомной ориентации.Как мне предотвратить это?Есть ли веская причина, по которой метод shouldAutorotateToInterfaceOrientation объекта A не соблюдается?

Ответы [ 2 ]

2 голосов
/ 06 февраля 2011

Это действительно очень раздражает в контроллерах представления.И кажется, что это не исправить для авторотации.Возможно, лучшим было бы вернуть NO из B shouldAutorotateToInterfaceOrientation B, а затем выполнить поворот представления вручную.Тогда это не повлияет на A.

1 голос
/ 06 февраля 2011

да, я тоже это ненавижу ... все, что я нашел, чтобы решить это, было сделать это самостоятельно:

- (void)myAutomaticRotation{
    if (A.view.frame.size.width > A.view.frame.size.height) {
        [UIView beginAnimations:@"View Flip" context:nil];
        [UIView setAnimationDuration: 0.5f];
        [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];

        self.view.transform = CGAffineTransformIdentity;
        self.view.transform = CGAffineTransformMakeRotation(M_PI/2);
        self.view.bounds = CGRectMake(0.0f, 0.0f, 320.0f, 480.0f);
        A.view.frame = CGRectMake(0,0,320, 480);
        [UIView commitAnimations];
    }
}

вы можете вызывать myAutomaticRotation в главном / супер UIViewController при переходе к A.view, и в том же месте вы должны использовать:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {

}

, где вы можете проверить используемый вид (A, B) и разрешить ландшафтный режим только для B ...

Luca

...