UISplitViewController на iPad плохо вращался при вращении modalView - PullRequest
1 голос
/ 27 августа 2011

У меня проблема с вращением на UISplitViewController. В моем случае после вызова текущего модального режима на splitViewController (этот splitViewController является корневым представлением окна), чтобы показать другое представление. Когда этот modalView вращается, splitView вращается неправильно.

splitView выглядит как повернутый, но DetailViewController остается таким же, как на портрете, а RootViewController вообще не отображается. Это все еще ведет себя как в портретном режиме. Кажется, что splitView вращается, но не базовые виды (DetailViewController и RootViewController).

Я пытаюсь реализовать willRotateToInterfaceOrientation в modalView и вызывать метод splitView willRotateToInterfaceOrientation с использованием делегата.

Это то, что я реализую в modalView:

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {
    [super willRotateToInterfaceOrientation:toInterfaceOrientation duration:duration];
    MacProjectAppDelegate *delegate = [[UIApplication sharedApplication] delegate];
    [delegate.splitViewController willRotateToInterfaceOrientation:toInterfaceOrientation duration:duration];
}

В результате DetailViewController ведет себя корректно, но не с RootViewController. Это остается скрытым. Он появится снова после того, как пользователь вручную переместится в книжную ориентацию и вернется в альбомную. Но, очевидно, пользователь не хотел этого.

Это то, что я сделал при представлении modalView:

ModalViewController *modalView = [[ModalViewController alloc] init];
MacProjectAppDelegate *delegate = (MacProjectAppDelegate *)[[UIApplication sharedApplication] delegate];
[delegate.splitViewController presentModalViewController:modalView animated:YES];
[modalView release];

Есть ли способ показать RootViewController в этом случае? Или я делаю что-то не так?

Edit: Кажется, что все представления не вращались после modalView. ни RootViewController, ни DetailViewController не вращались (the didRotateFromOrientation на обоих ViewController вообще не вызывался). Так что теперь я предполагаю, что он не вращался после устройства / modalView.

1 Ответ

1 голос
/ 05 сентября 2011

OK. Моя проблема была решена. Я сделал так, как написал комментарий к комментарию Шуракова.

Я получаю appDelegate и получаю splitViewController для вызова willRotateToInterfaceOrientation.

MacProjectAppDelegate *delegate = [[UIApplication sharedApplication] delegate];
[delegate.splitViewController willRotateToInterfaceOrientation:toInterfaceOrientation duration:duration];

Я сделал это дважды, так как только один из них, кажется, не работал (я не знаю почему). Один метод modalViewController willRotateToInterfaceOrientation, один метод RootViewController willAppear.

Чтобы удалить кнопку навигатора / поповер на DetailViewController, я просто аннулирую эту кнопку, вызвав invalidateRootPopoverButtonItem для RootViewController willAppear. Вот как это выглядит на этом конкретном методе (для первого на modalViewController я просто передаю команду willRotateToOrientation на splitViewController):

UIDeviceOrientation orientation = [[UIDevice currentDevice] orientation];
if (UIInterfaceOrientationIsLandscape(orientation)) {
    MacProjectAppDelegate *delegate = (MacProjectAppDelegate *)[[UIApplication sharedApplication] delegate];
    [delegate.splitViewController willRotateToInterfaceOrientation:orientation duration:1];
    [[[delegate.splitViewController viewControllers] objectAtIndex:1] invalidateRootPopoverButtonItem:self.rootPopoverButtonItem];        
}

Надеюсь, это может объяснить, как я преодолеваю свою проблему и помогаю всем, у кого была такая же проблема, как у меня.

...