Сохранение макетов моего приложения в портретном и альбомном режимах в iPhone - PullRequest
0 голосов
/ 09 марта 2011

В моем приложении есть представление с тремя сегментированными кнопочными контроллерами, и я разработал его в портретном режиме.Когда я поворачиваю экран, весь пользовательский интерфейс ... просто не прав.

enter image description here enter image description here

У меня вопрос, должен ли я проектировать как портретный, так и ландшафтный режим отдельно?Если так, то как мне это сделать?

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


Редактировать: только что нашел хороший пример Самый простой способ поддержки нескольких ориентаций?Как загрузить пользовательский NIB, когда приложение находится в альбомной ориентации?

Ответы [ 4 ]

3 голосов
/ 09 марта 2011

Я бы сказал, что это зависит от содержания. Иногда достаточно правильно настроить автоматическое изменение размеров элементов пользовательского интерфейса в Инспекторе Интерфейсного Разработчика, и вы получите удовлетворительный эффект, но есть случаи, когда простое изменение размера представления не позволяет оптимально использовать пространство экрана. В вашем случае, например, простое расширение сегментированных элементов управления до полной ширины, вероятно, будет не таким приятным, как расположение их рядом друг с другом, чтобы освободить место для текста внизу.

Если вы собираетесь разрабатывать оба режима по отдельности, вы можете использовать их как разные виды и переключаться между ними соответственно. Хороший пример можно найти в 4-й главе iPhone Cookbook . Что делает автор, так это переключает вид при изменении ориентации следующим образом:

- (BOOL)shouldAutorotateToInterfaceOrientation: (UIInterfaceOrientation) interfaceOrientation
 { 
     if ((interfaceOrientation == UIInterfaceOrientationLandscapeLeft)
        || (interfaceOrientation == UIInterfaceOrientationLandscapeRight))
       self.view = landscapeView;
    else if ((interfaceOrientation == UIInterfaceOrientationPortrait)
        || (interfaceOrientation == UIInterfaceOrientationPortraitUpsideDown))
       self.view = portraitView;
    return YES;
 }
1 голос
/ 09 марта 2011

Я настоятельно рекомендую вам посмотреть класс UIViewController в документации и прочитать все это (если вы еще этого не сделали).Ключевые методы, которые вам нужны, включают willRotateToInterfaceOrientation:duration:, описанные следующим образом:

willRotateToInterfaceOrientation: duration: Отправляется в контроллер представления непосредственно перед тем, как пользовательский интерфейс начинает вращаться.1009 *

Параметры toInterfaceOrientation Новая ориентация для пользовательского интерфейса.Возможные значения описаны в UIInterfaceOrientation.duration Продолжительность ожидаемого вращения, измеряется в секундах.Подклассы обсуждения могут переопределить этот метод для выполнения дополнительных действий непосредственно перед ротацией.Например, вы можете использовать этот метод, чтобы отключить интерактивные представления, остановить воспроизведение мультимедиа или временно отключить дорогостоящие чертежи или обновления в реальном времени.Вы также можете использовать его для замены текущего представления на то, которое отражает новую ориентацию интерфейса.Когда этот метод вызывается, свойство interfaceOrientation по-прежнему содержит исходную ориентацию представления.

Этот метод вызывается независимо от того, выполняет ли ваш код одношаговое или двухшаговое вращение.iOS 2.0 и более поздние версии.

Похоже, вы также должны включать:

 - (BOOL) shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
return NO;
}
0 голосов
/ 17 мая 2012

Я искал решение и, наконец, решил установить элементы макета программно, как описано в этой статье.

0 голосов
/ 09 марта 2011

Просто установите свойство autoresizingMask вашего элемента управления на

UIViewAutoresizingFlexibleWidth
...