Причудливая нежелательная анимация в приложении для iPhone

Я ненавижу публиковать это, но я вижу нежелательную анимацию в приложении для iPhone, над которым я работаю. Я никогда не видел этого раньше в своих приложениях или любых других приложениях.

Это приложение для iOS 4.2 и только для iPhone. Странность происходит даже на iPhone4.

Примеры:

  • Когда рассматриваемое приложение запускает UIAlertView, он "летит сверху или сверху слева".

  • Когда любой UITableView прокручивая, новые (стандартные) данные ячейки "расширяются слева от ячейки" при первом появлении и заполнении.

  • Когда UITextField В него введен текст, печатание идет медленно, и вы можете увидеть курсор, скользящий вправо над новой буквой. Если есть кнопка "Очистить" в UITextField, он скользит с левой стороны к UITextField впервые введен в.

  • Когда UIPickerView прокручивает, прокручивает до вновь отображаемой строки, "летит" новой строкой данных сверху слева.

Общее поведение аналогично старому старому Apple II+ basic, где вы можете установить "speed=20" и "замедлить" работу компьютера.

Что я знаю: это происходит на нескольких телефонах (4 и 3G). Это не происходит в других моих приложениях. Это не происходит в других приложениях в целом. Кажется, что это согласованно во всем приложении. Это не маленький проект, поэтому я не уверен точно, когда он начался, но он не начинался с такого поведения. Нет анимации, связанной с упомянутыми предметами. Кажется, что проблема влияет на все в приложении.

Существует даже пример автономного приложения с кодовой базой, которое при интеграции в это приложение prpoblem отображает те же проблемы.

Кто-нибудь видел такое поведение раньше? Я не единственный разработчик, поэтому есть ли какие-то возможные настройки, которые кто-то другой может установить, что вызывает это?

1 ответ

Решение

Похоже, вы оставляете анимации UIView незавершенными. Если вы начинаете анимацию, но никогда не заканчиваете ее, все манипуляции с UIView после этой точки будут анимированными, как вы описали. Странная часть - я думал, что UIKit прекратит их для вас (и запишет сообщение), если управление вернется обратно в runloop с открытым блоком анимации. Либо этого больше не происходит, либо вы постоянно запускаете новые анимационные блоки.

Вы должны просмотреть свой код для всех случаев +[UIView beginAnimations:context:] и убедитесь, что они все сбалансированы соответствующим +[UIView commitAnimations],

Другие вопросы по тегам