2012-05-31 4 views
3

Фон: Я хочу убедиться, что мой просмотрКонтроллеры правильно вращаются, когда он появляется. Мой просмотрКонтроллеры имеют отличные коды, управляющие поворотом и ориентацией, когда они видны.iOS: поворот проверки ориентации на ViewDidAppear

Проблема: Учитывая две viewControllers в NavigationController, viewC1 и viewC2. Я сделал следующее:

1.) Установить RootViewController в viewC1

2.) Нажмите viewC2 в NavigationController

3.) Поворот

4.) Поп viewC2

5 .) viewC1 все еще застрял в прежнем взгляде ориентации (как в коде преобразования в willAnimateRotationToInterfaceOrientation не был вызван) с новой ориентацией.

Что я могу сделать, чтобы гарантировать, что viewC1 позвоните по телефону willAnimateRotationToInterfaceOrientation, чтобы восстановить себя, чтобы выглядеть правильно в новом ротации?

Дополнительная информация: Это все код (без раскадровки/xib). У меня есть shouldAutorotateToInterfaceOrientation возвращение YES на все виды. Я использую willAnimateRotationToInterfaceOrientation для управления всем моим вращением.

О, и, пожалуйста, никаких хаков. Например, скопируйте код из поворота, затем проверьте вращение в ручном режиме и управляйте им в viewDidAppear.

+1

Не вызывайте ViewControllers 'view1' и' view2'. Это просто сбивает с толку.Существует огромная разница (как вы знаете) между 'UIView' и' UIViewController'. –

ответ

1

Подумайте о названии метода и о том, чего вы пытаетесь достичь.

willAnimateRotationToInterfaceOrientation указывает, что вид, контролируемый контроллером вида, приближается к определенной ориентации. Если ваше представление находится в середине стека навигации, оно не отображается на экране. Анимация чего-то, что не на экране, является дорогостоящей и в конечном итоге бесполезной. Таким образом, этот конкретный метод не может быть и речи, но проблема остается, что в UIKit нет ничего более подходящего. Причина в том, чтобы повернуть что-то (даже если не анимировать), когда оно за кадром, бесполезно. Разработчик должен отреагировать на изменение ориентации, когда появляется представление («преобразование по требованию», как вы это сделаете).

Вы говорите, что вам не нужны хаки, но метод, который вы описали как взломать, вероятно, является наиболее подходящей задачей. Имея общий метод с именем что-то вроде -(void) updateLayoutForOrientation:(UIInterfaceOrientation)orientation animated:(BOOL)animated { ... } - неплохая идея. Это может быть обработчик преобразований изменения ориентации для всего контроллера представления.

Места, которые нужно, возможно, проверить/отрегулировать вопросы ориентации

-(void) viewWillAppear:(BOOL)animated

-(void) willAnimateRotationToInterfaceOrientation: (UIInterfaceOrientation) interfaceOrientation duration: (NSTimeInterval) duration

и в обоих из них, называют updateLayoutForOrientation:animated:, чтобы сделать работу для вас.

+0

Допустимый аргумент точки. Подождите и посмотрите, есть ли у кого-то еще более прямой способ сделать это, так как кажется, что вращение с переключением просмотров очень распространено. Если через день не появится лучший способ, я правильно помету ваш ответ. Для вашей информации вы можете просто использовать 'willAnimateRotationToInterfaceOrientation' внутри' viewWillAppear' и добиться тех же результатов. – Byte

+0

@Byte Не поймите меня неправильно, вызывая 'willAnimateRotationToInterfaceOrientation' внутри' viewWillAppear', безусловно, возможно. Это мой личный стиль для извлечения общей логики и поместить его в свой собственный метод, и методы прямого делегата называют это. Я чувствую, что код немного лучше понимает, но все сводится к личным предпочтениям. – WDUK

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