UIViewController Containment - Новые дети не знают вращения - PullRequest
0 голосов
/ 01 февраля 2012

Мое приложение запускается с корневым контроллером представления. Его работа заключается в отображении заставки, пока приложение не будет готово. Заставка находится в отдельном контроллере вида (splashVC). Когда приложение готово, appDelegate вызывает существующий метод в корневом контроллере представления. Отсюда корневой контроллер представления добавляет другой контроллер представления (mainVC) в качестве дочернего, а затем переходит на новый контроллер с

    [splashVC willMoveToParentViewController:nil];
    [self transitionFromViewController:splashVC 
                  toViewController:mainVC
                          duration:0.5
                           options:UIViewAnimationOptionTransitionCrossDissolve
                        animations:^{
                                    [self.view addSubview:mainVC.view];
                                    [splashVC.view removeFromSuperview];
                                   }
                        completion:^(BOOL finished) {
                                       [splashVC removeFromParentViewController];
                                   }];

Моя проблема в том, что если я запускаю приложение в альбомном режиме, то вижу загрузку Default.png, за которой следует мой заставка, которая автоматически поворачивается в альбомную ориентацию. Это все имеет смысл. Но затем, когда на экране появляется mainVC, его вид кажется застрявшим в книжной ориентации - вид не расширяется до правой границы экрана. Контроллер корневого представления автоматически изменяет размеры - я добавил к нему цвет фона, чтобы видеть, что mainVC не полностью покрывает его. Я думал, что это может быть потому, что mainVC не был ребенком, когда произошла ротация. Поэтому я добавил mainVC в метод loadView контроллера корневого представления, в который был добавлен splashVC. Я просто пытаюсь выяснить, почему, когда отображается mainVC, это не автоматическое изменение размера. Если я добавлю метод -

willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration 

тогда я вижу, что вращение происходит до загрузки mainVC, так как это никогда не вызывается в mainVC. Я не хочу взломать изменение размера представления. Любая помощь в том, как справиться с этим, была бы великолепна. Возможно, мне что-то не хватает в моем контейнере, но я использую методы addChildViewController и didMoveToParentViewController для добавления моих контроллеров представления в качестве дочерних к корневому контроллеру представления.

РЕДАКТИРОВАТЬ - Я заметил, что в методе initVithNibNamed ... в mainVC значение self.interfaceOrientation - книжное, а в методе viewDidLoad - альбомное. Я не уверен, есть ли хороший способ, которым я могу объяснить это. Кажется, что вращение произошло во время загрузки пера.

Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 01 февраля 2012

ViewControllers получают обновления ориентации, только когда они представлены, являются частью иерархии представления, когда он получает сообщение, что представление изменилось.(Это сообщение уже было отправлено в этом случае) Исключением является случай, если вы использовали методы apple для навигации.Они правильно настраивают представления, когда их толкают / представляют.

Попробуйте использовать базовую навигацию и используйте push и pop для переключения между экранами.Или, если вы действительно хотите избавиться от этого одного контроллера представления, вы можете позвонить. Вы все равно можете анимировать их по-другому.

navigationController setViewControllers: (NSArray *) animated: (BOOL)

и передача в массив с новым контроллером представления внутри.Если вы установите анимированный на NO, вы можете просто использовать тот же блок анимации, чтобы сделать собственный.

0 голосов
/ 21 февраля 2012

Чтобы исправить это, добавлен второй контроллер вида как дочерний при настройке контроллера вида вместо ожидания до того, как я представлю контроллер вида.

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