Управление ориентацией iPhone: какой самый эффективный способ сделать? - PullRequest
1 голос
/ 16 марта 2011

Мне нужно разработать приложение для iPad, которое должно управлять двумя режимами ориентации (альбомная и книжная).Согласно официальной документации Apple iOS , есть два способа продолжить.

- Первый состоит в настройке элемента views при получении события вращения.Основным преимуществом является то, что у нас был только один ViewController - второй состоит в отображении определенного ViewController для каждой ориентации.Таким образом, у нас есть 2 ViewController.

Второй подход, кажется, хорош, но я боюсь, что количество ViewController будет необходимо.Более того, «логика синхронизации данных» в ViewControllers должна быть продублирована (или изолирована от ViewController) для использования в обеих ориентациях.

Приложение, которое мне нужно разработать, будет содержать много «полных пользовательских элементов»"и многие ViewControllers.

Если у кого-то есть советы или пожелания, это будет очень полезно;)

Спасибо за чтение!

Ответы [ 2 ]

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

Второй способ должен быть: использовать 2 разных вида (один для портрета, другой для ландшафта) и поменять местами вид контроллера контроллера в willRotateToInterfaceOrientation:. Не нужно дублировать логику данных.

Какой способ использовать? Я бы сказал: это зависит.

  • Если режимы пейзажа и портрета отличаются только положением / размером видов, я использую первый (плюс вы получите хорошую анимацию смены кадров)
  • Если пейзаж и портрет слишком разные, я предпочитаю второй.
1 голос
/ 16 марта 2011

Обычно я решаю эту проблему, используя преимущества autoresizing методов в представлении в сочетании с реализацией методов willAutorotateToInterfaceOrientation и willAnimateRotationToInterfaceOrientation в контроллере представления.

С помощью методов автоматического изменения размера вы можете легко изменить размерстандартные элементы интерфейса, предоставляемые Apple.Если ваши элементы пользовательского интерфейса не имеют невозможного макета, вы также можете применить к ним методы авторазмера.Необходимо установить для свойства autoresizesSubviews значение YES в родительском контроллере представления и выбрать режим автоматического изменения размера для каждого подпредставления.Например, если вы хотите, чтобы он изменял размеры вправо, сохраняя вид по центру, вы можете применить маску autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleRightMargin в подпредставлении.

Если методы авторазмера не помогают, то вам понадобитсяизменить размер каждого конфликтующего представления отдельно, внедрив - (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration в вашем контроллере представления.Если у вас есть «полные пользовательские элементы», вам нужно изменить их размер таким образом.

В своем конкретном опыте я предпочитаю иметь только один контроллер вида и один вид для всех ориентаций и управлять ими с помощью этих двух методов.

Надеюсь, это поможет вам!

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