Почему мое приложение не вращается в Xcode 4 / iOS5?

#ios

#iOS

Вопрос:

У меня возникли проблемы с вращением моего приложения с момента перехода на Xcode 4 и iOS 5. Рвя на себе волосы, я создал совершенно новый тестовый проект, чтобы посмотреть, смогу ли я заставить вращаться простое приложение.

Я создал тестовый проект, используя шаблон «Пустое приложение». Все, что я добавил к этому шаблону, — это UINavigationController с подключенным к нему UIViewController. Для UIViewController есть файл nib с одной меткой с надписью «Привет».

На целевом сводном экране я нажал все кнопки для «Поддерживаемых ориентаций устройств».

В файлах .m для кода контроллера навигации и просмотра я изменил shouldAutorotate … на:

 - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    // Return YES for supported orientations
    return (YES);
}
  

Тестовый проект создается без проблем и работает отлично. Есть панель навигации и дружелюбное сообщение «Привет», но чертова штука не вращается!

Очевидно, мне не хватает чего-то довольно простого, но я не могу понять, что это такое. Мое подозрение пало на .nib. В разделе «Имитируемые показатели» есть атрибут, называемый ориентацией. Для этого задано значение Портрет. Единственный другой вариант — «Пейзаж». Если я изменю этот параметр на «Альбомный», вид в редакторе .nib изменится на альбомный, но когда я запускаю приложение, оно работает в портретном режиме и по-прежнему отказывается поворачиваться.

Надеюсь, кто-нибудь посмеется над моей ошибкой и укажет на глупую ошибку, которую я совершаю. Пожалуйста, сделайте!

Ответ №1:

в вашем RootViewController.m найдите строку

 return (UIInterfaceOrientationIsPortrait( interface Orientation ) );
  

и вы можете заменить это на что угодно… Нравится

 return (UIInterfaceOrientationIsLandscape( interface Orientation ) );
  

Комментарии:

1. На самом деле у меня нет такой строки в моем корневом контроллере просмотра, но вы навели меня на след решения. В applicationDidFinishLaunchingWithOptions я выполнял: [self.window addSubview: nav.view], что, я думаю, немного старомодно. Что мне нужно было сделать, так это: [self.window setRootViewController: nav]. Это устранило проблему с вращением, хотя я не совсем уверен, почему. Первый способ работал для меня нормально. Мне нужно прочитать об этом и выяснить, почему оно больше не работает. Спасибо!

2. Последний вид, добавленный в окно, — это тот, который получает события поворота; если вы добавляли другой вид в окно после nav.view, это могло быть причиной того, что у вас ничего не получилось.

3. Обновлял старый проект и setRootViewController: проблема была в этом. Спасибо, Джон!