Подтвердить что ты не робот

Одноступенчатая и двухэтапная анимация для iPhone-приложений?

Что такое однонаправленная и двухступенчатая анимация для поворота окна iPhone?

Это сообщение об ошибке, которое я получаю в консоли отладчика (ничего не сбой):

Using two-stage rotation animation. To use the smoother single-stage animation, this application must remove two-stage method implementations.

Я работал над проектом "Начало разработки iPhone: изучение iPhone SDK" Apress (Dave Mark, Jeff LaMarche) в проекте Swap.

4b9b3361

Ответ 1

Все объяснено в Справочник класса UIViewController. Особенно проверьте раздел Просмотр поворота вверху.

Из справки:

Обработка поворотов просмотра

По умолчанию класс UIViewController отображает только в портретном режиме. Чтобы поддерживать дополнительные ориентации, вы должны переопределить shouldAutorotateToInterfaceOrientation:метод и вернуть ДА для любого ориентации вашего подкласса. Если авторезистирующие свойства вашего представления настроены правильно, что может быть все, что вам нужно. Однако, класс UIViewController обеспечивает дополнительные крючки для вас по мере необходимости, дополнительное поведение.

Чтобы временно отключить функции, которые не нужны или могут вызывать проблемы во время ориентации изменения, вы можете переопределить willRotateToInterfaceOrientation:duration:метод и выполнить необходимые действия там. Затем вы можете переопределить didRotateFromInterfaceOrientation:метод и использовать его для повторного использования этих после изменения ориентации завершено.

Если вы хотите выполнить пользовательский анимации во время ориентации изменение, вы можете сделать это в одном из двух пути. Изменения ориентации, используемые для происходят в два этапа, с уведомлениями происходящих в начале, середине, и конечные точки вращения. Однако в iPhone OS 3.0 поддержка была добавлено для выполнения ориентации изменения в один шаг. Использование одношагового изменение ориентации имеет тенденцию быть более быстрым чем предыдущий двухэтапный процесс, и рекомендуется для любых новых код.

Добавить анимацию для одношаговой изменение ориентации, переопределить willAnimateRotationToInterfaceOrientation:duration:и выполнять анимацию там. Использовать старый двухступенчатый метод, переопределить один или оба из willAnimateFirstHalfOfRotationToInterfaceOrientation:duration:а также willAnimateSecondHalfOfRotationFromInterfaceOrientation:duration:методы настройки анимации перед каждым шагом. Вы должны выбрать только один метод и переопределить только методы, связанные с этим техника. Если вы переопределите либо метод, связанный с двухступенчатым техника, контроллер вида использует этот метод по умолчанию.

Ответ 2

Я изменил метод willAnimateFirstHalfOfRotationToInterfaceOrientation:duration: на willAnimateRotationToInterfaceOrientation:duration:, и предупреждение исчезло.

Спасибо.

Ответ 3

Я обнаружил, что виновником в моем случае является UIImagePickerController (я также не переопределяю любую анимацию вращения):

[self presentModalViewController: imagePicker animated: YES];

Замена imagePicker на общий UIViewController не генерирует никаких предупреждений.

Ответ 4

Ответ Эд Марти правильный. Причина, по которой это произойдет, если вы не переопределяете какую-либо анимацию вращения, вероятно, вы ответили "YES" на shouldAutorotate.. для некоторого вида. Если вы вообще не выполняете ротацию, вам следует просто не переопределить метод shouldAutorotate... Если вы переопределите этот метод, просто переопределите метод поворота на один шаг и передайте его в супер.

Ответ 5

Если вы используете iOS 4, и вы получаете это предупреждение, я нашел способ избавиться от него. В вашем файле info.plist есть элемент под названием "Поддерживаемые ориентации интерфейса". Выберите ориентации, поддерживаемые вашим приложением, и двухэтапные предупреждения исчезнут при воссоздании imagePicker.

Ответ 6

@plumiscles ответ не совсем сработал у меня - не было элемента под названием "Поддерживаемые интерфейсные ориентации", возможно, b/c это старый проект. Но вы можете получить тот же эффект, отредактировав файл .plist напрямую и добавив следующее:

 <key>UIInterfaceOrientation</key>
  <string>UIInterfaceOrientationPortrait</string>

Ответ 7

Нужно добавить UIImagePickerController в качестве подпункта для решения этой ошибки

[self.view addSubview:picker.view];
[self presentModalViewController:picker animated:NO];

Ответ 8

У меня возникла эта проблема после создания tabbarcontroller без контроллеров просмотра внутри (без вкладок), это предупреждение исчезло после того, как я привязал к нему хотя бы один контроллер представления.

Ответ 9

Я не перешел ни на одну из этих двухступенчатых функций, но я вызывал свою собственную функцию, когда получал уведомления orientationChanged, и у меня была эта строка кода. Комментируя это, он избавился от предупреждения и позволил авто поворот работать правильно. Автоматический поворот по-прежнему работал с этой строкой кода до iOS 4.2, после чего он полностью сломался. Провел много времени, чтобы узнать, почему встроенный autoRotate перестает работать в 4.2. Возможно, это поможет кому-то другому.

Прокомментируйте эту строку, чтобы она работала:
[[UIApplication sharedApplication] setStatusBarOrientation:currentOrientation animated:YES];

Ответ 10

Я удаляю строку plist "Поддерживаемые интерфейсные ориентации" и предупреждение исчезает.

Ответ 11

У меня была такая же проблема. В моем случае была глупая ошибка, которую я ставлю здесь на всякий случай, если кто-то другой попадает в ту же проблему.

В моем приложении с вкладками я удаляю один из исходных ViewControllers и добавляет новый с помощью Storyboard для создания раздела "Настройки".

Этот новый VC должен был быть табличным VC, и даже я разработал, скомпилировал и запустил его без проблем, когда я изменил ориентацию приложения, которое я продолжал получать "Использование двухступенчатой ​​анимации вращения".

Моя проблема заключалась в том, что я забыл изменить исходный интерфейс файла .h "UIViewController" для "UITableViewController".

Как только это было сделано, я изменил на значке идентификатора Storyboard класс от общего значения до моего SettingsViewController, и это было его окончанием.

Надеюсь, это поможет кому-то другому. Мне потребовалось некоторое время, чтобы добраться до этого.

Приветствия,