2010-09-16 4 views
1

У меня есть корень UIView с двумя подвидов:Как заставить UIView перерисовывать, когда пользователь прокручивает UIScrollView?

  1. пользовательские UIView подкласс
  2. UIScrollView

Обычай UIView подкласс некоторые утверждают, что обновляется с помощью NSTimer, который выстреливает через каждые N секунд , Когда состояние представления обновляется, представление вызывает [self setNeedsDisplay], которое вскоре вызывает повторную перемотку. Все это работает так, как ожидалось.

Однако, когда пользователь прокручивает UIScrollView, пользовательский подкласс UIView не перерисовывает. Когда пользователь коснется UIScrollView, происходит перерисовка. Затем, когда пользователь перестает касаться UIScrollView и прокрутка завершается полностью, пользовательский подкласс UIView, наконец, перерисовывается.

Есть ли способ заставить пользовательский подкласс UIView перерисовывать, когда пользователь прокручивает UIScrollView?

+0

Возможный дубликат [UIScrollView приостанавливает NSTimer до окончания прокрутки] (http://stackoverflow.com/questions/605027/uiscrollview-pauses-nstimer-until-scrolling-finishes) –

ответ

1

я больше на стороне Mac, но я думаю, что, так как -setNeedsDisplay: флаги для будущего перерисовки, это никогда не происходит, потому что свиток/сенсорное событие еще привязывание текущего (основной) цикла. В этом случае ваш таймер никогда не получит возможность запускать основную runloop, потому что прокрутка еще не закончена.

Коррекция

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

Другой Сложение

Ах. Кажется this has already been answered on SO.

+0

Спасибо! Я не думал, что NSTimer был виновником, поэтому я даже не думал искать UIScrollView/NSTimer. –

+0

Это не означает, что таймеры, циклы запуска и пользовательский интерфейс (о мой!) Не дают мне головных болей, но, безусловно, хорошо иметь хотя бы тонкое понимание того, как они взаимодействуют. Это, по крайней мере, дает вам хорошие отправные точки для выяснения того, насколько плохо вы плохо себя чувствуете. :-) –

+0

Да, я только что закончил чтение документации Run Loops (http://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/Multithreading/RunLoopManagement/RunLoopManagement.html). Очень информативно. –

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