Одноступенчатая или двухступенчатая анимация для приложений iPhone? - PullRequest
16 голосов
/ 12 января 2010

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

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

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

Я работал над книгой Swap Project «Начало разработки iPhone: Изучение iPhone SDK» Апресса (Дейв Марк, Джефф Ламарш).

Ответы [ 11 ]

15 голосов
/ 12 января 2010

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

Из обращения:

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

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

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

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

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

3 голосов
/ 29 июля 2010

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

[selfsentModalViewController: imagePicker animated: YES];

Замена imagePicker универсальным UIViewController не генерирует никаких предупреждений.

3 голосов
/ 16 июня 2010

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

Спасибо.

1 голос
/ 09 марта 2013

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

1 голос
/ 26 мая 2011

Необходимо добавить UIImagePickerController в качестве подпредставления, чтобы решить эту ошибку

[self.view addSubview:picker.view];
[self presentModalViewController:picker animated:NO];
1 голос
/ 23 сентября 2010

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

 <key>UIInterfaceOrientation</key>
  <string>UIInterfaceOrientationPortrait</string>
1 голос
/ 29 июля 2010

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

1 голос
/ 07 июля 2010

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

0 голосов
/ 02 мая 2012

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

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

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

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

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

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

Приветствия

0 голосов
/ 20 июля 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...