Как поддерживать только портретный режим в приложении для iPhone

У меня странная проблема с приложением для iPhone, которое я разрабатываю. Я хочу, чтобы мое приложение поддерживало ТОЛЬКО портретный режим, но по какой-то причине я не могу этого сделать (устройство и симулятор).

Для поддержки только портретного режима я сделал следующее:

  • В сводном разделе TARGET в Xcode я выбрал только портретную ориентацию.
  • Все мои ViewControllers реализуют shouldAutorotateToInterfaceOrientation

Но, как я уже сказал, это не сработает, и странным результатом является то, что приложение поддерживает ВСЕ ориентации (книжная, перевернутая, альбомная слева, альбомная справа).
Есть идеи?

вот как я реализую shouldAutorotateToInterfaceOrientation

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
     // Return YES for supported orientations
     NSLog(@"Checking orientation %d", interfaceOrientation);
     return (interfaceOrientation == UIInterfaceOrientationPortrait);
}

Я только что заметил, что когда я поворачиваю телефон, я получаю следующее сообщение:

«Двухэтапная анимация вращения устарела. Это приложение должно использовать более плавную одноступенчатую анимацию».

Что это значит?


person Eyal    schedule 05.04.2012    source источник
comment
Попробуй мой ответ. Может, это поможет.   -  person rohan-patel    schedule 06.04.2012
comment
Попробуйте добавить NSLog(@"Checking orientation %d", interfaceOrientation); в свои shouldAutorotateToInterfaceOrientation методы. Вызывается ли какой-либо из них, когда вы вращаете симулятор или свое устройство?   -  person Dondragmer    schedule 08.04.2012
comment
Спасибо за вашу помощь, да, печать журнала Проверка ориентации 1. Но я заметил кое-что еще, пожалуйста, проверьте мой обновленный вопрос   -  person Eyal    schedule 08.04.2012
comment
@Eyal: дополнительные сообщения консоли, вероятно, означают, что ваш код реализует старый и устаревший didAnimateFirstHalfOfRotationToInterfaceOrientation: и аналогичный willAnimateAnimateOfRotationToInterfaceOrientation: и аналогичный willAnimateOfRotationToInterfaceOrientation: длительность: Вероятно, можно обойтись и без этих методов.   -  person Dondragmer    schedule 10.04.2012
comment
@Eyal: interfaceOrientation of 1 - UIInterfaceOrientationPortrait, чего вы и ожидаете. Если это действительно происходит при повороте в альбомную ориентацию, это еще более странно, чем когда-либо: устройство возвращает ДА, потому что думает, что вращается в портретную ориентацию. Можете выложить полный shouldAutorotateToInterfaceOrientation метод?   -  person Dondragmer    schedule 10.04.2012
comment
@Dondragmer: может быть, старая реализация didAnimateFirstHalfOfRotationToInterfaceOrientation вызывает проблему? (Я опубликовал полный метод в своем вопросе)   -  person Eyal    schedule 12.04.2012
comment
@Eyal: Методы didAnimate... не должны иметь никакого эффекта. shouldAutorotateToInterfaceOrientation: - это все, что имеет значение. Что регистрируется, если вы поворачиваете устройство в каждую из четырех ориентаций? Отображается Checking orientation 1 четыре раза?   -  person Dondragmer    schedule 12.04.2012
comment
@Dondragmer: я был уверен, что у меня появляется «Проверка ориентации 1» каждый раз, когда я поворачиваю устройство раньше, но теперь я вижу, что получаю это только в первый раз, когда viewController становится видимым, но когда я поворачиваю устройство (или симулятор), я только получить анимацию двухэтапного вращения устарело ... без вызова метода shouldAutorotateToInterfaceOrientation   -  person Eyal    schedule 12.04.2012
comment
@Eyal: Вы реализовали shouldAutorotateToInterfaceOrientation: для всех ваших viewControllers? Он вызывается только в зависимости от того, какой из них активен в данный момент.   -  person Dondragmer    schedule 12.04.2012
comment
@Dondragmer: Да, конечно, должен ли вызываться shouldAutorotateToInterfaceOrientation каждый раз, когда я поворачиваю устройство?   -  person Eyal    schedule 12.04.2012
comment
@Eyal: Да, но он будет вызываться только в зависимости от того, какой viewController находится на переднем плане. Сколько у вас viewControllers? Все ли их shouldAutorotateToInterfaceOrientation: методы содержат этот оператор регистрации?   -  person Dondragmer    schedule 12.04.2012
comment
@Dondragmer: Да, я копирую этот метод для всех. У меня есть 3 основных viewController, которые загружаются при запуске приложения и используются в UITabBarController.   -  person Eyal    schedule 12.04.2012
comment
UITabBarController сам является ViewController. Реализация по умолчанию, кажется, отвечает на shouldAutorotateToInterfaceOrientation:, запрашивая его подпредставления, но если вы создали свой собственный подкласс UITabBarController, он может иметь свою собственную версию. Вы создали подкласс UITabBarController?   -  person Dondragmer    schedule 12.04.2012
comment
@Dondragmer: Ты гений! Да, я создаю подкласс UITabBarController, хотя я не реализовал в нем shouldAutorotateToInterfaceOrientation, но когда я реализовал его с помощью UIInterfaceOrientationPortrait, это сработало! Спасибо за терпение, могу я как-нибудь оценить ваш ответ?   -  person Eyal    schedule 12.04.2012
comment
@Eyal: Спасибо. Я отправил ответ, если вы решите его принять.   -  person Dondragmer    schedule 12.04.2012


Ответы (4)


На экране может быть несколько ViewController. UITabBarController сам по себе является UIViewController, и он передает shouldAutorotateToInterfaceOrientation: запросы к viewController только в том случае, если он этого выберет. Реализация по умолчанию делает это, но если вы подклассифицируете ее, код, генерируемый XCode (начиная с iOS 5.1), этого не делает.

person Dondragmer    schedule 12.04.2012

В сводке по цели выберите только портрет.

person Eric    schedule 05.04.2012
comment
попробуйте удалить методы shouldAutorotateToInterfaceOrientation и правильно установить цель. - person Eric; 05.04.2012

Перейдите в файл info.plist. Щелкните правой кнопкой мыши, чтобы открыть его как исходный код. И ищите эту строчку. Для меня в iPad это так:

  <key>UISupportedInterfaceOrientations~ipad</key>

Удалите все остальные ориентации и оставьте только ту, которая вам нужна .. Вот так:

    <array>

    <string> UIInterfaceOrientationPortrait </string>

</array>
person rohan-patel    schedule 05.04.2012

проверьте свой список и убедитесь, что ключ установлен правильно.

person Jesse Naugher    schedule 05.04.2012