2010-01-12 2 views
16

Что такое однонаправленная и двухступенчатая анимация для поворота окна 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.

ответ

15

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

Из справки:

Обработка Просмотр Ротации

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

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

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

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

+2

К сожалению, это не поможет. Я не использую никаких функций ориентации, и эта ошибка все еще происходит. Появляется ошибка в OS4. – typeoneerror

+0

Этот ответ подходит для некоторых ситуаций, но не для других. Разумеется, этот раздел в документах НЕ объясняет ошибку полностью - в Apple UIImagePickerController/presentModalController есть определенные ошибки, которые вызывают это сообщение об ошибке (и которые НЕ ДОЛЖНЫ запускать его). Все еще пытаюсь найти обходное решение :(. – Adam

+0

@ Adam: http://stackoverflow.com/questions/2878947/getting-using-two-stage-rotation-animation-warning-with-uiimagepickercontroller – geon

3

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

Спасибо.

1

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

3

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

[собственный presentModalViewController: imagePicker анимированным: YES];

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

+0

У меня такая же проблема для UIImagePickerController Есть ли другой способ удалить ошибку, не меняя ее на UIViewController? – karim

+1

Как вы указали параметры UIImagePickerController с помощью UIViewController? – Joze

1

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

1

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

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

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

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

1

Нужно добавить UIImagePickerController как подвид решить эту ошибку

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

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

0

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

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

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

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

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

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

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

1

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

Смежные вопросы