2016-08-19 2 views
0

Я работаю над приложением iPad, которое имеет пользовательский рисунок UIView, который в основном охватывает весь экран. Это звуковое приложение, и у него есть счетчики VU, которые получают сообщения об обновлении через Ethernet около 30 раз в секунду, а затем сообщают пользовательскому интерфейсу перерисовывать счетчики VU на экране.Обработка множественных/частых вызовов UIView needsDisplayInRect эффективно

Проблема заключается в том, что есть 16 VU метров в разных положениях в представлении, и я в конечном итоге вызываю needsDisplayInRect для каждого из них 30 раз в секунду. Если я делаю весь рисунок в функции drawRect, тогда он работает, но он довольно вялый, так как CGRect прошел до drawRect - это почти весь экран.

В версии OSX есть функция NSViewgetRectsBeingDrawn, которая дала мне маршрут для значительного улучшения производительности перерисовки. Однако, насколько мне известно, в iOS нет эквивалентной функции.

Я пытался хранить CGRects, что я назвал тогда только перерисовывать их в drawRect, но оказывается, что IOS часто решает перерисовать области между CGRects, оказавшим needsDisplayInRect призвал их, так что я в конечном итоге большие белые прямоугольники в областях, на которые я не запрашивал перерисовку (хотя я действительно добиваюсь улучшения производительности, которого я ожидаю). Проблема здесь в том, что я не вижу способа получить исправления, которые на самом деле перерисовываются, а только прямой передается в drawRect, который по сути является объединением всех исправлений, которые перерисовываются.

Итак, есть ли другой способ ускорить очень частое перерисовывание небольших областей UIView, которые я пропустил?

ответ

1

Самое простое решение - почти наверняка сделать подзапрос для каждого измерителя VU. Предположительно, у вас будет только один класс VUMeterView и сделать шестнадцать его экземпляров.

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