UIView и изменения ориентации: UITextField Preservation и пользовательские анимации фрейма UI - PullRequest
1 голос
/ 20 июля 2010

Без взаимодействия с разработчиком вы можете изменить размер представления для поддержки ориентации, во многих случаях это хорошо, но что, если вам нужно изменить макет объектов пользовательского интерфейса, чтобы он лучше соответствовал новой ориентации?

Ответ от яблок :

  • Есть два отдельных ViewController с XIB, которые отражают желаемую разметку.
  • Назначьте мастер ViewController (рекомендуется портрет).
  • Подписаться на beginGeneratingDeviceOrientationNotifications
  • В методе уведомления (мастер), проверьте ориентацию и нажмите или выдвиньте ведомый ViewController как модальный.

По номиналу, если макет содержит несколько UITextFields, изменение ориентации очищает поля (с точки зрения пользователей), указывая на то, что метод копирования поля также необходим в методе события уведомления. Разве для этого нет автоматического обеспечения? (или альтернативный шаблон)

Но что, если вы хотите получить хорошую анимацию перевода кадров с короткой задержкой в ​​пользовательском интерфейсе?

В качестве альтернативы, вместо того, чтобы иметь два контроллера View, я использовал CGAffineTransforms для анимации изменений фрейма объекта пользовательского интерфейса (срабатывает на willRotateToInterfaceOrientation) с дополнительным бонусом выглядеть сексуально, но код выглядит не очень элегантно.

Я не знаю других решений.

Чтобы добраться до сути: Какой самый эффективный и быстрый способ изменить макеты объектов пользовательского интерфейса на событиях ориентации, что предпочтительно облегчает анимацию трансляции кадров?

Ответы [ 2 ]

2 голосов
/ 20 июля 2010

Самый эффективный способ - сделать макет в коде. Недостатки в том, что вы должны писать некрасивый код и избегать IB. Результатами являются эластичность и производительность. Я написал метод в моем контроллере представления, который принимает UIInterfaceOrientation в качестве аргумента и выкладывает свои представления соответственно. Затем я вызываю этот метод из -willAnimateRotationToInterfaceOrientation: duration :. Конечно, код очень уродливый, но быстрый. По сути, я просто установил там несколько свойств фрейма.

1 голос
/ 20 июля 2010

Преобразования легче всего интегрировать с анимацией перехода.

Обычно я решаю эту проблему, используя разные пары вид / вид-контроллер для каждой ориентации.Хитрость в том, чтобы сделать эту работу без проблем - постоянно обновлять уже введенные данные в объекте внешней модели данных.Каждый контроллер представления автоматически заполняет пользовательский интерфейс своего представления из модели данных.Таким образом, вам не нужно беспокоиться о перемещении данных между контроллерами представления, что может привести к путанице, если у вас много представлений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...