2015-01-14 2 views
0

Я добавил NSTimer, который обновляет мой интерфейс, в основном, с информацией 10 раз в секунду. Он вызывает функцию, которая отправляет работу обратно в основной поток.NSTimer разрушает все мои анимации

Контроллер вида также имеет вид прокрутки. У меня есть пейджинговая система, в которой я изменяю свое представление прокрутки, перемещаясь со страницы на страницу, когда пользователь нажимает на вкладку (кнопку), которая соответствует каждой вкладке. Эта анимация прокрутки только что прекратилась - это как если бы я вызывал scrollToRect с анимацией как НЕТ, хотя я называю ее с помощью YES.

Я думаю, что, поскольку я обновляю свои ярлыки, автоматический макет делает что-то изворотливое в фоновом режиме и разрушает мои анимации прокрутки. То же самое происходит для других анимаций, которые используют ограничения компоновки для перемещения представлений.

Я знаю, что есть проблемы с Autolayout и NSTimer.

Что можно сделать, чтобы исправить это?

Благодаря

+0

Если вы создаете подкласс вашего 'UILabel' и переопределяете' intrinsicSize', чтобы всегда возвращать постоянное значение, он может не пытаться испортить компоновку ограничений при обновлении текста. На 100% не уверен. –

+0

Вы можете попробовать установить логическое значение перед началом анимации, и если этот параметр установлен, ваш метод таймера отсрочит обновление. В конце анимации очистите boolean и обновите данные – Paulw11

+0

Именно это я и попытался! Переменная «блокировка таймера», которая заставляет блок таймера просто возвращать, а не обновлять интерфейс. Кажется, не имеет значения. – Vazzyb

ответ

0

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

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