2013-05-22 2 views
2

Я заметил, что большинство удобных для пользователя приложений для Android и iPhone для фитнеса имеют два режима интерфейса: в портретном режиме пользователь получает более подробную информацию, но когда пользователь переключает устройство в альбомный режим, полноэкранный график добавляется к обложке весь экран.iPhone, как отобразить другой контроллер представления в ответ на вращение устройства?

Меня интересует, как реализовать переход на другой контроллер представления в ответ на вращение устройства на iPhone. Мои первоначальные мысли - перехватить (событие willRotateToInterfaceOrientation, затем получить делегат приложения и добавить в окно полноэкранный графический контроллер).

Есть ли лучший способ превратить поворот iPhone в переход к другому контроллеру представления? Как сокрытие строки состояния и нажатие модального контроллера в ландшафтном режиме с анимацией?

+0

Что случилось с вашей первоначальной мыслью? –

ответ

3

Сначала спросите себя, действительно ли вам нужен отдельный контроллер вида. Один контроллер может легко скрыть или отобразить график. Если этому графу нужен свой собственный просмотрщик, тогда вы можете использовать представление контейнера, содержащее график, который ссылается на собственный обработчик вида. Вот для чего предназначены контейнеры. Контроллер вида «Мастер» затем просто скроет и отобразит представление контейнера в ответ на события вращения (и соответствующим образом разместит их и т. Д.).

Если вы предпочитаете добавлять или удалять вид контейнера из своего супер-представления (скорее всего, self.view с точки зрения контроллера «Master»), тогда сделайте это вместо того, чтобы скрываться и скрываться. Это, вероятно, наиболее уместно.

Поверхность этого приложения будет заключаться в том, что он работает независимо от структуры навигации, в которой вы находитесь, независимо от того, был ли нажат или представлен вращение контроллера просмотра, независимо от того, находитесь ли вы в приложении с вкладкой или одном приложение для просмотра, используете ли вы раскадровку, работаете с IB, а также программно и т. д. pp.

Нет ничего плохого в том, чтобы извлечь экземпляр окна из делегата приложения. Я просто не вижу необходимости в этом. Для меня это довольно сложно по сравнению с альтернативами.

0

У вас может быть один контроллер вида, который имеет метод willRotateToInterfaceOrientation, и что viewcontroller имеет два других регулятора просмотра в качестве переменных.

После того как устройство вращается, вы переключаетесь Соображения viewcontrollers' (очень грубый пример кода :)

-(void)willRotateToInterfaceOrientation: (UIInterfaceOrientation)orientation duration:(NSTimeInterval)duration { 

if ((orientation == UIInterfaceOrientationLandscapeLeft) || (orientation == UIInterfaceOrientationLandscapeRight)) { 
    [self.secondViewController.view removeFromSuperView]; 
    self.firstViewController.view.frame = self.bounds; 
    [self.view addSubView:self.firstViewController.view]; 
    } else { 
    [self.firstViewController.view removeFromSuperView]; 
    self.secondViewController.view.frame = self.bounds; 
    [self.view addSubView:self.secondViewController.view]; 
    } 
} 
1

willRotateToInterfaceOrientation Метод хорошо работает.

Помимо переключение представлений, две других полезных вещей, которые вы можете сделать в есть:

1) Скрыть/показать строку состояния. (Мне нравится спрятать это в ландшафте)

[[UIApplication sharedApplication] setStatusBarHidden:UIInterfaceOrientationIsLandscape(toInterfaceOrientation) withAnimation:UIStatusBarAnimationSlide]; 

2) Скрыть/Показать любой UINavigationBar. (Возможно, ваш ландшафтный вид выиграет от дополнительной высоты)

[self.navigationController setNavigationBarHidden:UIInterfaceOrientationIsLandscape(toInterfaceOrientation) animated:YES]; 
+0

Вы не знаете, как скрыть панель вкладок, не так ли? –

+0

@AlexStone Не думайте, что вы можете со стандартным UITabBarController. Вы можете посмотреть на использование альтернативы, например https://github.com/NOUSguide/NGTabBarController ... –

+0

Я также нашел эту реализацию: https://github.com/idevsoftware/Cocoa-Touch-Additions/tree/master/UITabBarController_setHidden –

Смежные вопросы