Вещи, которые вы, вероятно, уже знаете: делайте как можно больше, используя маски автоматического изменения размера. В идеальном мире вы бы все сделали с ними. Есть много случаев, когда вы можете, хотя нетрудно придумать примеры контроллеров, где вы хотите больше контроля, и у вас, очевидно, есть. В терминах кода очевидная вещь - реализовать shouldAutorotateToInterfaceOrientation
и убедиться, что вы возвращаете 'YES' для поддерживаемых ориентаций.
Кроме того, главное, что вы хотите реализовать - это - willAnimateRotationToInterfaceOrientation: duration: . Это будет вызвано в блоке анимации, когда представление будет вращаться, и будет использоваться, чтобы дать мгновенный эффект всякий раз, когда вы входите в контроллер представления в ориентации, которой он не был ранее. Переместите и / или измените то, что вы видите там, и вы получите должным образом анимированный переход по своему желанию. В целях достойной анимации гораздо лучше перенастроить один вид, чем переключаться с одного на другой.
Сокращенный (и переформатированный для области тонкого текста здесь в StackOverflow) пример кода из проекта, который у меня есть:
- (void)willAnimateRotationToInterfaceOrientation:
(UIInterfaceOrientation)toInterfaceOrientation
duration:(NSTimeInterval)duration
{
if(UIInterfaceOrientationIsPortrait(toInterfaceOrientation))
{
nameField.frame = CGRectMake(75, 107, 225, 31);
nameLabel.frame = CGRectMake(20, 107, 47, 32);
URLField.frame = CGRectMake(75, 145, 225, 31);
URLLabel.frame = CGRectMake(20, 145, 47, 32);
}
else
{
nameField.frame = CGRectMake(75, 107, 155, 31);
nameLabel.frame = CGRectMake(20, 107, 47, 32);
URLLabel.frame = CGRectMake(250, 107, 35, 32);
URLField.frame = CGRectMake(293, 107, 167, 31);
}
}
Розетки классов подключаются к паре меток и текстовых полей, что позволяет пользователю вводить имя и URL-адрес. Эффект этого кода состоит в том, что представление переключается с одного столбца на два столбца в зависимости от ландшафта или портрета.
Это жесткая привязка к таким жестким позициям кода, но я еще не нашел лучшего способа. Если вас не волнует анимация перетасовки, более наглядным способом может быть просто настроить два вида отдельно в NIB и добавить / удалить соответствующий, когда наступит момент.