shouldAutorotateToInterfaceOrientation вызывается несколько раз подряд без поворота - PullRequest
1 голос
/ 12 апреля 2010

Я пытаюсь внести некоторые изменения интерфейса в мое приложение, основываясь на ротации устройства.

Мое приложение - приложение, основанное на просмотре. Итак, его контроллер основного вида имеет метод didload.

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

При отладке приложения я поставил

NSLog(@"orientation=%d", interfaceOrientation);

в моем методе shouldAutorotateToInterfaceOrientation, и то, что я вижу, довольно странно:

  • Когда я запускаю приложение, beforeAutorotateToInterfaceOrientation вызывается 6 раз, прежде чем интерфейс приложения появляется. Каждый раз, когда он запускается, он сообщает другое число для ориентации: порядок, который он сообщает на консоли: портрет, портрет, портрет, пейзаж вправо, пейзаж влево, вверх ногами) (????).

В это время приложение только начинается. Отладчик сообщает обо всех 6 вызовах, поступивших от делегата приложения.

Итак, вот вопросы:

  1. Почему AutorotateToInterfaceOrientation не вызывается, когда устройство входит в портрет?
  2. Почему делегат вызывает этот метод 6 раз до того, как приложение становится видимым, особенно если вращение не выполняется?

спасибо.

Ответы [ 2 ]

3 голосов
/ 12 апреля 2010

Справочник по классам UIViewController , кажется, говорит, что этот метод возвращает значение, "указывающее, поддерживает ли контроллер представления указанную ориентацию".

Он не дает никаких обещаний, что устройство сейчас вращается / не вращается, он просто запрашивает, какие ориентации может поддерживать ваш контроллер. Отсюда и утверждение:

Ваш контроллер вида либо способен поддерживать заданную ориентацию, либо нет.

2 голосов
/ 12 апреля 2010

Система кэширует ответы, поэтому она знает, какие ориентации попытаться обнаружить.

...