Управление ориентацией с несколькими окнами на iPad - PullRequest
0 голосов
/ 07 октября 2010

У меня есть приложение для iPad, которое работает между двумя состояниями, одно из которых использует SplitView, другое - TableView.

В настоящее время у меня есть один объект UIWindow, и я переключаюсь между представлениями с помощью следующего кода

-(void) switchToStateA {
[viewControllerB.view removeFromSuperview];
[window addSubview:viewControllerA.view];
}
-(void) switchToStateB {
[viewControllerA.view removeFromSuperview];
[window viewControllerB.view];
}

Все работает нормально, если я не меняю ориентацию устройства.После изменения ориентации и переключения состояний состояние, которое не было активным во время изменения, все еще остается в рамке своего старого состояния (оставляя черные области на краю дисплея).Если я снова изменю ориентацию, новое состояние будет исправлено.

Я попытался добавить

[viewControllerA.view setNeedsLayout];

после смены видов, но это не дало эффекта.

Как убедиться, что контроллеры фонового представления получают обратный вызов ориентации, или как вызвать «обновление» при переключении состояния?

Ответы [ 2 ]

1 голос
/ 07 октября 2010

Это чистое предположение с моей стороны, но что, если вместо удаления вида контроллера представления из окна, вы устанавливаете вид на скрытый и используете exchangeSubviewAtIndex:withSubviewAtIndex: для изменения того, какой вид контроллера представления видимпользователю.Интересно, оптимизирует ли ОС то, что события поворота не отправляются на контроллеры представления, чьи представления не имеют суперпредставления.

Вы можете даже получить анимацию и уменьшить альфа в верхнем представлении до 0, тогда как в нижнемальфа исчезает до 1, прежде чем они поменяются местами.

0 голосов
/ 07 октября 2010

Изменения ориентации устройства обрабатываются UIViewControllers, а не изолированными UIViews.Самый простой способ решить вашу проблему - сделать вид контроллера тупым контейнером, который вы никогда не удалите из окна.Вид контейнера всегда будет правильно вращаться, как это разрешено контроллером.Затем вы просто добавляете / удаляете подпредставления в / из контейнера, чтобы их тоже можно было повернуть.Не забудьте установить фреймы подпредставлений и маски автоматического изменения размера, прежде чем добавлять их в представление контейнера.

...