Приложение не вращается на iPhone Simulator

Я хочу протестировать свое приложение с разрешением iPhone 5, поэтому использую симулятор. В моем приложении есть портретная и 2 альбомной ориентации в поддерживаемых ориентациях устройств, а для viewControllers, которые разрешают вращение, shouldAutorotateToInterfaceOrientation установлено значение YES. Тем не менее, когда я вращаю устройство в симуляторе, оно не вращается, как на устройстве. Прямо сейчас я использую стандартный симулятор iPhone 4.

Изменить: это код, который у меня есть для настройки моего VC.

UIViewController *vc = [[UIViewController alloc] init];
    self.navigationController = [[UINavigationController alloc] initWithRootViewController:vc];
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    [self.window makeKeyAndVisible];
    [self.window addSubview:self.navigationController.view];

self.loadingWood = [[UIImageView alloc] init];
[vc.view addSubview:self.loadingWood];

А вскоре после этого:

self.timeline = [[JTimelineViewController alloc] init];
[self.navigationController setViewControllers:[NSArray arrayWithObject:self.timeline]];

Это необходимо для визуализации при запуске приложения.

РЕДАКТИРОВАТЬ 2:

Теперь у меня это работает. Проблема, с которой я сейчас сталкиваюсь, заключается в том, что, несмотря на то, что один из моих viewController заявляет об этом, он все еще вращается при любом повороте в симуляторе iPhone:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    return (interfaceOrientation == UIInterfaceOrientationPortrait);

}

РЕДАКТИРОВАТЬ 3: Мой телефон работает под управлением iOS5. Симулятор работает под управлением iOS6. Это возможная причина. Удаление «Пейзаж слева» и «Пейзаж справа» в качестве поддерживаемых ориентаций означает, что симулятор не вращается вообще, но мой iPhone 4 с iOS5 продолжает вращаться как обычно.


person Andrew    schedule 03.10.2012    source источник
comment
Он вращается на симуляторе iPhone 4?   -  person Simon Germain    schedule 03.10.2012
comment
Нет. Он вращается на реальном iPhone 4, который у меня есть.   -  person Andrew    schedule 03.10.2012
comment
Вау, интересно ... Дай мне попробовать! Мне сейчас очень любопытно ...: D   -  person Simon Germain    schedule 03.10.2012
comment
Хороший вопрос. +1! Несмотря на то, что я только что создал новый проект в Xcode и запустил код в симуляторе iPhone (как 4, так и 5), вращения работают правильно. Без кода отладка может быть немного сложной.   -  person Simon Germain    schedule 03.10.2012
comment
Можете ли вы попробовать заменить эту строку setViewControllers: на [self.navigationController pushViewcontroller: self.timeline animated: NO (или YES, если вы хотите анимацию)];   -  person Simon Germain    schedule 03.10.2012
comment
Это сработало, но проверьте мою правку выше.   -  person Andrew    schedule 03.10.2012
comment
Этот код для shouldAutorotateToInterfaceOrientation находится на вашей временной шкале vc или в главном vc?   -  person Simon Germain    schedule 03.10.2012
comment
Это на временной шкале ВК. Вращения не происходит, когда на экране отображается основной VC.   -  person Andrew    schedule 03.10.2012
comment
Чтобы прояснить ситуацию, вы хотите, чтобы он вращался или нет?   -  person Simon Germain    schedule 03.10.2012
comment
Я хочу, чтобы он вращался в представлениях, где для shouldRotate установлено значение YES.   -  person Andrew    schedule 03.10.2012


Ответы (2)


Убедитесь, что вы устанавливаете контроллер корневого представления, как в:

    self.window.rootViewController = self.navigationController;
person Mike M    schedule 03.10.2012
comment
Это сработало, но теперь, если он находится на viewController, который позволяет вращать и поворачивается в альбомную ориентацию, а затем он возвращается к viewController, который не позволяет вращать в альбомной ориентации, он показывает viewController в альбомной ориентации. Есть ли способ предотвратить это? - person Andrew; 03.10.2012

Мне приходилось иметь дело с чем-то подобным в прошлом. Что происходит, так это то, что только главный контроллер представления приложения получает уведомления о ротации и вызовы делегатов. Есть некоторые исключения, такие как UINavigationController, который передает эти события своему текущему контроллеру представления.

Так, например, если ваш класс AppDelegate загружает контроллер представления, и этот контроллер представления подталкивает второй контроллер представления, этот второй контроллер представления не будет получать уведомления о вращении.

Я рекомендую вам использовать UINavigationController для вывода ваших UIViewControllers на дисплей, поскольку UINavigationController передает вызовы и уведомления делегатов вращения.

ИЗМЕНИТЬ

В предпочтениях Xcode на вкладке «Загрузить» у вас есть возможность загрузить предыдущие симуляторы, iOS 5 и iOS 5.1. Загрузите их, установите для своей целевой версии iOS 5.0 (или 5.1) и выберите правильный симулятор из списка устройств. Посмотрите, не возникнет ли у вас та же проблема, что и с симулятором iOS 6. Если вы это поняли, то определенно есть разница между способами обработки UINav в iOS 5 и iOS 6.

Кроме того, разница между setViewControllers и pushViewController заключается в том, что pushViewController добавляет контроллер представления в качестве дочернего элемента родительского контроллера представления, что заставляет его отвечать на вызовы делегатов, включая ротацию. Начиная с iOS 5, каждый UIViewController теперь имеет метод addChildViewController, который предоставляет эту функциональность классу UIViewController.

person Simon Germain    schedule 03.10.2012